在 Matplotlib 中使用复选按钮

PythonPythonBeginner
立即练习

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

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

简介

本实验将演示如何在Python Matplotlib中使用复选按钮。复选按钮允许用户通过复选按钮来打开和关闭视觉元素,类似于复选框。我们将使用 CheckButtons 函数创建一个包含三个不同正弦波的图表,并能够通过复选按钮选择显示哪些波形。

虚拟机使用提示

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

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

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

导入库

我们将首先导入必要的库。我们需要 numpy 来生成数据,以及 matplotlib 来创建图表。

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.widgets import CheckButtons

生成数据

接下来,我们将为图表生成数据。我们将使用 numpy 创建三个频率不同的正弦波。

t = np.arange(0.0, 2.0, 0.01)
s0 = np.sin(2*np.pi*t)
s1 = np.sin(4*np.pi*t)
s2 = np.sin(6*np.pi*t)

创建图表

现在,我们将使用 matplotlib 创建图表。我们将在同一图表上绘制三个正弦波,并将第一个波的可见性设置为 False,因为我们希望开始时它是隐藏的。

fig, ax = plt.subplots()
l0, = ax.plot(t, s0, visible=False, lw=2, color='black', label='1 Hz')
l1, = ax.plot(t, s1, lw=2, color='red', label='2 Hz')
l2, = ax.plot(t, s2, lw=2, color='green', label='3 Hz')
fig.subplots_adjust(left=0.2)

添加复选按钮

现在,我们将使用 CheckButtons 函数为图表添加复选按钮。我们将把绘制的线条作为标签传递,并设置每条线的初始可见性。我们还将调整复选按钮的属性,使其与绘制线条的颜色相匹配。

lines_by_label = {l.get_label(): l for l in [l0, l1, l2]}
line_colors = [l.get_color() for l in lines_by_label.values()]

rax = fig.add_axes([0.05, 0.4, 0.1, 0.15])
check = CheckButtons(
    ax=rax,
    labels=lines_by_label.keys(),
    actives=[l.get_visible() for l in lines_by_label.values()],
    label_props={'color': line_colors},
    frame_props={'edgecolor': line_colors},
    check_props={'facecolor': line_colors},
)

定义回调函数

我们需要为复选按钮定义一个回调函数。每次点击复选按钮时都会调用此函数。我们将使用此函数来切换图表上相应线条的可见性。

def callback(label):
    ln = lines_by_label[label]
    ln.set_visible(not ln.get_visible())
    ln.figure.canvas.draw_idle()

check.on_clicked(callback)

显示图表

最后,我们将使用 show() 函数来显示图表。

plt.show()

总结

在本实验中,我们学习了如何在Python的Matplotlib中使用复选按钮。我们创建了一个包含三个不同正弦波的图表,并能够通过复选按钮选择显示哪些波形。我们使用 CheckButtons 函数创建按钮,并定义了一个回调函数来切换图表上相应线条的可见性。