Matplotlib 捕捉滑块

PythonPythonBeginner
立即练习

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

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

简介

在本实验中,你将学习如何使用Matplotlib创建具有离散值的滑块。你将学习如何将滑块的值限制在一组允许的值范围内,并将滑块值捕捉到这些允许的值上。

虚拟机提示

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

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

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

导入所需库

在这一步中,你将导入本实验所需的库。你将使用Matplotlib来创建滑块,并使用NumPy来生成要绘制的数据。

import matplotlib.pyplot as plt
import numpy as np

from matplotlib.widgets import Button, Slider

生成数据

在这一步中,你将生成要绘制的数据。你将创建一个频率为3Hz、振幅为5的正弦波。

t = np.arange(0.0, 1.0, 0.001)
a0 = 5
f0 = 3
s = a0 * np.sin(2 * np.pi * f0 * t)

创建图形和坐标轴

在这一步中,你将为绘图创建图形和坐标轴。你还将调整坐标轴的位置,以便为滑块留出空间。

fig, ax = plt.subplots()
fig.subplots_adjust(bottom=0.25)
l, = ax.plot(t, s, lw=2)

ax_freq = fig.add_axes([0.25, 0.1, 0.65, 0.03])
ax_amp = fig.add_axes([0.25, 0.15, 0.65, 0.03])

定义振幅滑块的允许值

在这一步中,你将定义振幅滑块的允许值。振幅滑块将使用这些值来捕捉到最接近的允许值。

## define the values to use for snapping
allowed_amplitudes = np.concatenate([np.linspace(.1, 5, 100), [6, 7, 8, 9]])

创建滑块

在这一步中,你将创建滑块。你将为振幅创建一个滑块,为频率创建一个滑块。

samp = Slider(
    ax_amp, "Amp", 0.1, 9.0,
    valinit=a0, valstep=allowed_amplitudes,
    color="green"
)

sfreq = Slider(
    ax_freq, "Freq", 0, 10*np.pi,
    valinit=2*np.pi, valstep=np.pi,
    initcolor='none'  ## Remove the line marking the valinit position.
)

创建更新函数

在这一步中,你将为滑块创建更新函数。当滑块值发生变化时,此函数将更新绘图。

def update(val):
    amp = samp.val
    freq = sfreq.val
    l.set_ydata(amp*np.sin(2*np.pi*freq*t))
    fig.canvas.draw_idle()

将滑块与更新函数连接

在这一步中,你将把滑块与更新函数连接起来。这将确保每当滑块值发生变化时,绘图都会更新。

sfreq.on_changed(update)
samp.on_changed(update)

创建重置按钮

在这一步中,你将为滑块创建一个重置按钮。点击时,重置按钮会将滑块值重置为其初始值。

ax_reset = fig.add_axes([0.8, 0.025, 0.1, 0.04])
button = Button(ax_reset, 'Reset', hovercolor='0.975')

def reset(event):
    sfreq.reset()
    samp.reset()
button.on_clicked(reset)

显示绘图

在这一步中,你将显示绘图。

plt.show()

总结

在这个实验中,你学习了如何使用Matplotlib创建具有离散值的滑块。你学习了如何将滑块的值限制在一组允许的值范围内,并将滑块值捕捉到这些允许的值上。你还学习了如何为滑块创建一个重置按钮。