Matplotlib 图例切换教程

PythonPythonBeginner
立即练习

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

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

简介

在本实验中,我们将学习如何使用 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 启用图例的拾取功能,以切换原始线条的显示与隐藏。我们创建了图形和坐标轴,准备了数据,创建了线条和图例,将图例线条映射到原始线条,定义了拾取事件函数,将拾取事件函数连接到画布,并显示了绘图。