我在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()
答案 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()