2016-07-05 8 views
0

GUIウィンドウ(TkInterなど)内のprevious question(以下)の例に示すように、matplotlibスライダを使用したかったのです。しかし、非グローバルコンテキストでは、プロット( "spos、fig、ax")の変数は定義されていません。私の理解では、更新はコールバック関数として使用されるため、引数を渡すことはできません。非グローバルコンテキストでのコールバックからのmatplotlibスライダウィジェット位置の取得

もしそうなら、グローバル変数なしでプロットをどのように更新できますか?または

コールバック関数の外でスライダの位置を取得するにはどうすればよいですか?関連

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

__call__方法で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 

クラスに、例えば、コールバック関数に複数の引数を渡すことが可能であるが、また、コールバックとして使用することができます。

関連する問題