2011-08-22 100 views
3

我用matplotlib中的滑塊更新基於GUI輸入的幾個圖。 我所有的圖表都會更新。 但是,當我使用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

每次通話時間p.figtext(0.5, 0.65, str(slider1.val))要創建哪些正在對以前的頂部寫了一個新的Text對象。你應該做的是保存對第一個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