2011-08-22 83 views
3

GUI入力に基づいていくつかのグラフを更新するために、matplotlibのスライダを使用しました。 すべてのグラフがうまく更新されます。 しかし、私がfigtextを使うと、更新されたテキストが既存のテキストに上書きされるという問題があります。matplotlibスライダの再描画がfigtextを更新しない

import numpy as np 
import pylab as p 
from matplotlib.widgets import Slider 

p.subplot(111) 
x = np.arange(0,500,1) 
f = np.sin(x/100.0) 
l11, = p.plot(f) 

ax = p.axes([0.25, 0.05, 0.7, 0.03], axisbg='lightgoldenrodyellow') 
slider1 = Slider(ax, 'amplitude', -1.0, 1.5, valinit=0) 

def update(val): 
    f = slider1.val * np.sin(x/100.0) 
    l11.set_ydata(f) 
    np.set_printoptions(precision=2) 
    p.figtext(0.5, 0.65, str(slider1.val)) 
    p.draw() 

slider1.on_changed(update) 
p.show() 

答えて

4

あなたは以前のものの上に書かれている新しいTextオブジェクトを作成しているp.figtext(0.5, 0.65, str(slider1.val))呼び出すたびに。最初にTextオブジェクトへの参照を保存し、その内容を更新するには、set_text()メソッドを呼び出してください。私はあなたのコードを実際の例で更新しました。

import numpy as np 
import pylab as p 
from matplotlib.widgets import Slider 

p.subplot(111) 
x = np.arange(0,500,1) 
f = np.sin(x/100.0) 
l11, = p.plot(f) 

ax = p.axes([0.25, 0.05, 0.7, 0.03], axisbg='lightgoldenrodyellow') 
slider1 = Slider(ax, 'amplitude', -1.0, 1.5, valinit=0) 

# the text on the figure 
fig_text = p.figtext(0.5, 0.65, str(slider1.val)) 

def update(val): 
    f = slider1.val*np.sin(x/100.0) 
    l11.set_ydata(f) 
    np.set_printoptions(precision=2) 

    # update the value of the Text object 
    fig_text.set_text(str(slider1.val)) 

    p.draw() 

slider1.on_changed(update) 
p.show() 
+0

ありがとう、それは私にも意味があります。 – roadrunner66

関連する問題