我想使用 matplotlib 滑块,如 GUI 窗口(如 TkInter 等)中上一个问题(如下)的示例所示。但是,在非全局上下文中,没有定义绘图的变量("spos,fig,ax")。我的理解是,由于更新用作回调函数,因此不能或不应该传递参数。
如果是这样,如何在没有全局变量的情况下更新图? 或
如何获取回调函数外的滑块位置?
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider
fig, ax = plt.subplots()
plt.subplots_adjust(bottom=0.25)
t = np.arange(0.0, 100.0, 0.1)
s = np.sin(2*np.pi*t)
l, = plt.plot(t,s)
plt.axis([0, 10, -1, 1])
axcolor = 'lightgoldenrodyellow'
axpos = plt.axes([0.2, 0.1, 0.65, 0.03], axisbg=axcolor)
spos = Slider(axpos, 'Pos', 0.1, 90.0)
def update(val):
pos = spos.val
ax.axis([pos,pos+10,-1,1])
fig.canvas.draw_idle()
spos.on_changed(update)
plt.show()
相关:
1)另一个相关问题似乎涵盖了这个主题,但似乎没有解决如何获得滑块的位置。
2)提出并用Slider.set_val()解决了类似的问题。在我看来,我需要 Slider.get_val() 代替。
可以将更多参数传递给回调函数,例如使用 functools.partial
def update(data, val):
pos = spos.val
ax.axis([pos,pos+10,-1,1])
fig.canvas.draw_idle()
data['position'] = pos
import functools
data = dict()
spos.on_changed(functools.partial(update, data))
plt.show()
try:
print data['position']
except KeyError:
pass
带有__call__
方法的类也可以用作回调。