【发布时间】:2018-11-12 14:20:06
【问题描述】:
在 Matplotlib https://matplotlib.org/gallery/widgets/slider_demo.html 的 Slider Demo 之后,我想更新 Slider 范围,以便每次更改滑块值时,这些值都会在 Slider 中重新居中。
我尝试将滑块定义为
sfreq = Slider(axfreq, 'Freq', freq-10, freq+10, valinit=freq)
samp = Slider(axamp, 'Amp', amp-5, amp+5, valinit=amp)
但由于 update() 函数不返回任何内容,因此它不起作用。我还尝试在函数内部使这些变量成为全局变量,但这也不起作用。我终于尝试在更新函数中定义 Sliders,
def update(val):
amp = samp.val
freq = sfreq.val
l.set_ydata(amp*np.sin(2*np.pi*freq*t))
fig.canvas.draw_idle()
Slider(axfreq, 'Freq', freq-10, freq+10, valinit=freq)
Slider(axamp, 'Amp', amp-5, amp+5, valinit=amp)
但是当我更改值时,它会覆盖越来越多的滑块。有什么建议吗?
【问题讨论】:
-
您可能想要更改
update函数中的Slider对象属性。类似sfreq.valmin = amp - 5。 -
我看不出这对我有什么帮助。你能详细说明一下吗?那么我将如何定义 sfreq 和 samp 呢?
-
我目前无法想象它应该如何工作。想象一下,您将滑块向右移动,然后在拖动它的同时,滑块移回中心。此时您的鼠标远离滑块,不会再触摸它。进一步移动鼠标将重复上述操作,这样鼠标的最小拖动就会大大放大效果。我认为这根本不会产生有用的结果。
-
我之所以要这样做是因为我正在编写一个程序来适应一些数据,这些数据因实验而异。这些拟合需要有良好的起始猜测,并且没有办法先验地猜测。我正在使用滑块来直观地研究参数空间,一旦模型函数相对接近实验数据,用户就会继续拟合数据。我需要重新调整 Slider 值以缩小选项范围。
-
我想我明白你想要什么,但如上所述,我目前无法想象这种滑块如何与鼠标交互相关,独立于 matplotlib。也许不允许拖动,而只允许点击?
标签: matplotlib matplotlib-widget