我试图理解source code能够使用matplotlib的Slider小部件。定义函数update()
的代码段确实困扰我:
我没有看到在val
中使用参数def update(val):
,而val
的值在任何地方都没有被引用。问题与def reset(event):
功能相同。到目前为止,我做过一些简单的测试:
val
参数的名称更改为其他随机单词,例如def update(wtf):
,而不更改函数的正文。生成的代码仍然可以正常工作。def update(wtf=None):
。生成的代码仍然可以正常工作。def update():
。 Slider NO LONGER会更改绘图,这意味着脚本无法正常工作。我不明白这个update
函数或val
参数是如何工作的。有人可以解释一下吗?
答案 0 :(得分:1)
on_changed
回调将为该函数提供滑块的当前值。因此update
函数需要一个参数。此参数未在示例中使用的原因是update
函数需要两个滑块的值,而不管哪个滑块更改,因此直接从Slider实例中获取值。
为了更好地理解滑块的工作方式,可以考虑以下简化版本:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider
fig, ax = plt.subplots()
plt.subplots_adjust(left=0.25, bottom=0.25)
t = np.arange(0.0, 1.0, 0.001)
s = np.sin(6*np.pi*t)
l, = plt.plot(t, s, lw=2, color='red')
plt.axis([0, 1, -1.2, 1.2])
axfreq = plt.axes([0.25, 0.1, 0.65, 0.03], facecolor="lightblue")
sfreq = Slider(axfreq, 'Freq', 0.1, 20.0, valinit=3)
def update(val):
l.set_ydata(np.sin(2*np.pi*val*t))
fig.canvas.draw_idle()
sfreq.on_changed(update)
plt.show()
这里只有一个滑块,值传递给update函数,用于计算新的ydata值。
非常明显地,按钮的on_click
回调将click事件传递给函数。在这种情况下,这是非常无用的,但可能会用于查看,使用了哪个鼠标按钮,或者确切地发生了点击。
def reset(event):
if event.button == 1:
sfreq.reset()
samp.reset()
else:
print("Please use the left mouse button")
button.on_clicked(reset)
答案 1 :(得分:0)