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()
1 个回答
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()