将标记属性映射到多变量数据

PythonPythonBeginner
立即练习

This tutorial is from open-source community. Access the source code

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本实验中,你将学习如何使用标记的不同属性,通过 Python 的 Matplotlib 库绘制多元数据集。具体来说,你将学习如何将一次成功的棒球投掷表示为一个笑脸,其中标记大小映射到投掷者的技能,标记旋转映射到起飞角度,推力映射到标记颜色。

虚拟机提示

虚拟机启动完成后,点击左上角切换到“笔记本”标签,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,请随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。

导入库

在这一步中,你将为本实验导入必要的库。具体来说,你将导入 MatplotlibNumpy 以及 Matplotlib 的各个模块,如 MarkerStyleTextPathAffine2D

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 库来绘制多变量数据集。具体来说,你学习了如何将一次成功的棒球投掷表示为一个笑脸,其中标记大小映射到投掷者的技能,标记旋转映射到起飞角度,推力映射到标记颜色。按照本实验中概述的步骤,你可以为自己的多变量数据集创建类似的图表。