使用 Matplotlib 创建正弦波滑块

MatplotlibMatplotlibBeginner
立即练习

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

定义正弦波函数

接下来,我们将定义生成正弦波的函数。该函数将接受两个参数,即幅度和频率,并返回给定时间的正弦波。

def f(t, amplitude, frequency):
    return amplitude * np.sin(2 * np.pi * frequency * t)

创建初始图表

现在,我们将创建正弦波的初始图表。我们将定义幅度和频率的初始参数,并使用这些参数绘制正弦波。

t = np.linspace(0, 1, 1000)
init_amplitude = 5
init_frequency = 3

fig, ax = plt.subplots()
line, = ax.plot(t, f(t, init_amplitude, init_frequency), lw=2)
ax.set_xlabel('Time [s]')

创建滑块

现在我们将创建滑块,以便能够调整正弦波的频率和幅度。我们将创建一个水平滑块来控制频率,以及一个垂直滑块来控制幅度。

fig.subplots_adjust(left=0.25, bottom=0.25)
axfreq = fig.add_axes([0.25, 0.1, 0.65, 0.03])
freq_slider = Slider(
    ax=axfreq,
    label='Frequency [Hz]',
    valmin=0.1,
    valmax=30,
    valinit=init_frequency,
)

axamp = fig.add_axes([0.1, 0.25, 0.0225, 0.63])
amp_slider = Slider(
    ax=axamp,
    label="Amplitude",
    valmin=0,
    valmax=10,
    valinit=init_amplitude,
    orientation="vertical"
)

创建更新函数

现在我们将创建一个函数,该函数会在每次调整滑块时更新正弦波。此函数将获取幅度和频率滑块的值,并相应地更新正弦波。

def update(val):
    line.set_ydata(f(t, amp_slider.val, freq_slider.val))
    fig.canvas.draw_idle()

将更新函数与滑块关联

接下来,我们会将更新函数与每个滑块进行关联,这样每次调整滑块时都会调用该函数。

freq_slider.on_changed(update)
amp_slider.on_changed(update)

创建重置按钮

现在我们将创建一个重置按钮,它会将滑块重置为其初始值。

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

def reset(event):
    freq_slider.reset()
    amp_slider.reset()
button.on_clicked(reset)

显示图形

最后,我们将展示带有滑块和重置按钮的图形。

plt.show()

总结

在本教程中,我们学习了如何创建滑块并使用它们来控制正弦波的频率和幅度。我们使用 Matplotlib 库创建了正弦波和滑块的图形。我们创建了一个水平滑块来控制频率,一个垂直滑块来控制幅度。我们还创建了一个重置按钮,用于将滑块重置为其初始值。