从非全局上下文中的回调中获取matplotlib滑块窗口小部件位置

时间:2016-07-05 00:00:11

标签: python-2.7 matplotlib widget slider

我想使用matplotlib滑块,如GUI窗口内的previous question(下面)示例中所示(例如TkInter等)。但是,在非全局环境中,未定义绘图的变量(“spos,fig,ax”)。我的理解是因为update被用作回调函数,所以不能或不应该传递参数。

如果是这样,如何在没有全局变量的情况下更新绘图?或

如何获取回调函数外的滑块位置?

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)另一个related question似乎涵盖了这个主题,但似乎没有解决如何获得滑块的位置。

2)问了similar question并用Slider.set_val()解决了。在我的情况下,我似乎需要Slider.get_val()。

1 个答案:

答案 0 :(得分:1)

可以将更多参数传递给回调函数,例如使用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__方法的类也可以用作回调。