matplotlib滑块重绘不会更新figtext

时间:2011-08-22 21:43:46

标签: python slider matplotlib

我在matplotlib中使用滑块根据GUI输入更新了一些图形。 我的所有图表都更新了。 但是当我使用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()

1 个答案:

答案 0 :(得分: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()