简介
在本实验中,我们将学习如何使用 Python Matplotlib 启用图例上的拾取功能,以切换原始线条的显示与隐藏。
虚拟机使用提示
虚拟机启动完成后,点击左上角切换到“笔记本”标签页,以访问 Jupyter Notebook 进行练习。
有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。
如果你在学习过程中遇到问题,随时向 Labby 提问。课程结束后提供反馈,我们会及时为你解决问题。
在本实验中,我们将学习如何使用 Python Matplotlib 启用图例上的拾取功能,以切换原始线条的显示与隐藏。
虚拟机启动完成后,点击左上角切换到“笔记本”标签页,以访问 Jupyter Notebook 进行练习。
有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。
如果你在学习过程中遇到问题,随时向 Labby 提问。课程结束后提供反馈,我们会及时为你解决问题。
首先,我们需要导入所需的库,即 NumPy 和 Matplotlib。
import matplotlib.pyplot as plt
import numpy as np
我们将使用 NumPy 生成两个频率不同的正弦波。
t = np.linspace(0, 1)
y1 = 2 * np.sin(2*np.pi*t)
y2 = 4 * np.sin(2*np.pi*2*t)
我们将使用 Matplotlib 创建一个图形和坐标轴,并设置绘图的标题。
fig, ax = plt.subplots()
ax.set_title('Click on legend line to toggle line on/off')
我们将使用 Matplotlib 创建两条线和一个图例。
line1, = ax.plot(t, y1, lw=2, label='1 Hz')
line2, = ax.plot(t, y2, lw=2, label='2 Hz')
leg = ax.legend(fancybox=True, shadow=True)
我们将使用一个字典把图例线条映射到原始线条上。
lines = [line1, line2]
lined = {} ## 用于将图例线条映射到原始线条。
for legline, origline in zip(leg.get_lines(), lines):
legline.set_picker(True) ## 启用图例线条的选中功能。
lined[legline] = origline
我们将定义拾取事件函数,该函数将切换与图例代理线相对应的原始线的可见性。
def on_pick(event):
## 在拾取事件中,找到与图例代理线相对应的原始线,并切换其可见性。
legline = event.artist
origline = lined[legline]
visible = not origline.get_visible()
origline.set_visible(visible)
## 更改图例中线的透明度,以便我们能看到哪些线被切换了。
legline.set_alpha(1.0 if visible else 0.2)
fig.canvas.draw()
我们将把拾取事件函数连接到画布上。
fig.canvas.mpl_connect('pick_event', on_pick)
我们将使用 Matplotlib 显示绘图。
plt.show()
在本实验中,我们学习了如何使用 Python 的 Matplotlib 启用图例的拾取功能,以切换原始线条的显示与隐藏。我们创建了图形和坐标轴,准备了数据,创建了线条和图例,将图例线条映射到原始线条,定义了拾取事件函数,将拾取事件函数连接到画布,并显示了绘图。