简介
在本实验中,你将学习如何使用标记的不同属性,通过 Python 的 Matplotlib 库绘制多元数据集。具体来说,你将学习如何将一次成功的棒球投掷表示为一个笑脸,其中标记大小映射到投掷者的技能,标记旋转映射到起飞角度,推力映射到标记颜色。
虚拟机提示
虚拟机启动完成后,点击左上角切换到“笔记本”标签,以访问 Jupyter Notebook 进行练习。
有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。
如果你在学习过程中遇到问题,请随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。
导入库
在这一步中,你将为本实验导入必要的库。具体来说,你将导入 Matplotlib、Numpy 以及 Matplotlib 的各个模块,如 MarkerStyle、TextPath 和 Affine2D。
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import Normalize
from matplotlib.markers import MarkerStyle
from matplotlib.text import TextPath
from matplotlib.transforms import Affine2D
定义成功符号
在这一步中,你将定义三个成功符号,用于表示棒球投掷的成功情况。具体来说,你将为成功投掷定义一个笑脸,为部分成功投掷定义一个中性脸,为失败投掷定义一个哭脸。
SUCCESS_SYMBOLS = [
TextPath((0, 0), "☹"),
TextPath((0, 0), "😒"),
TextPath((0, 0), "☺"),
]
生成随机数据
在这一步中,你将为投掷者的技能、起飞角度、推力、是否成功以及位置生成随机数据。具体来说,你将为每个变量生成 25 个数据点,但位置变量每个数据点有两个坐标。
N = 25
np.random.seed(42)
skills = np.random.uniform(5, 80, size=N) * 0.1 + 5
takeoff_angles = np.random.normal(0, 90, N)
thrusts = np.random.uniform(size=N)
successful = np.random.randint(0, 3, size=N)
positions = np.random.normal(size=(N, 2)) * 5
data = zip(skills, takeoff_angles, thrusts, successful, positions)
定义颜色映射
在这一步中,你将定义颜色映射,用于将投掷的推力映射到标记的颜色。具体来说,你将使用 Matplotlib 的“plasma”颜色映射。
cmap = plt.colormaps["plasma"]
创建图表
在这一步中,你将使用之前生成的随机数据创建图表。具体来说,你将把每个数据点绘制成一个标记,其成功符号由 success 变量决定,大小由 skill 变量决定,旋转角度由起飞角度变量决定,颜色由推力变量决定。
fig, ax = plt.subplots()
fig.suptitle("Throwing success", size=14)
for skill, takeoff, thrust, mood, pos in data:
t = Affine2D().scale(skill).rotate_deg(takeoff)
m = MarkerStyle(SUCCESS_SYMBOLS[mood], transform=t)
ax.plot(pos[0], pos[1], marker=m, color=cmap(thrust))
fig.colorbar(plt.cm.ScalarMappable(norm=Normalize(0, 1), cmap=cmap),
ax=ax, label="Normalized Thrust [a.u.]")
ax.set_xlabel("X position [m]")
ax.set_ylabel("Y position [m]")
显示图表
在这一步中,你将使用 Matplotlib 的 show() 函数来显示图表。
plt.show()
总结
在这个实验中,你学习了如何使用标记的不同属性,通过 Python 的 Matplotlib 库来绘制多变量数据集。具体来说,你学习了如何将一次成功的棒球投掷表示为一个笑脸,其中标记大小映射到投掷者的技能,标记旋转映射到起飞角度,推力映射到标记颜色。按照本实验中概述的步骤,你可以为自己的多变量数据集创建类似的图表。