我使用 matplotlib 中的 slider 根据 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()
最佳答案
每次调用 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()
关于python - matplotlib slider 重绘不更新图文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7153969/