import
numpy as np
import
matplotlib.pyplot as plt
from
matplotlib.widgets
import
Slider, Button
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,
=
plt.plot(t, f(t, init_amplitude, init_frequency), lw
=
2
)
ax.set_xlabel(
'Time [s]'
)
axcolor
=
'lightgoldenrodyellow'
ax.margins(x
=
0
)
plt.subplots_adjust(left
=
0.25
, bottom
=
0.25
)
axfreq
=
plt.axes([
0.25
,
0.1
,
0.65
,
0.03
], facecolor
=
axcolor)
freq_slider
=
Slider(
ax
=
axfreq,
label
=
'Frequency [Hz]'
,
valmin
=
0.1
,
valmax
=
30
,
valinit
=
init_frequency,
)
axamp
=
plt.axes([
0.1
,
0.25
,
0.0225
,
0.63
], facecolor
=
axcolor)
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
=
plt.axes([
0.8
,
0.025
,
0.1
,
0.04
])
button
=
Button(resetax,
'Reset'
, color
=
axcolor, hovercolor
=
'0.975'
)
def
reset(event):
freq_slider.reset()
amp_slider.reset()
button.on_clicked(reset)
plt.show()