python - matplotlib slider 重绘不更新图文

标签 python slider matplotlib

我使用 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/

相关文章:

python - 从多个列表中获取元素

javascript - Swiper spaceBetween 无法正常工作

jquery - Bootstrap 轮播 slider 不会等到下一个图像加载成功

python - 创建一个条形图,其条形是相对于最大值或最小值的填充进度百分比

python - 在 Python (Matplotlib) 中重用模块引用

Python 3 删除文件字符串的一部分

python - AMQPConnectionError 使用 Pika 和 RabbitMQ 与 Asyncore - 为什么?

python - 由于 UnicodeDecodeError,解压下载的 .gz 文件失败

jquery - 幻灯片jquery并转换为css

python - 如何使用python opencv在jupyter笔记本上以正常速度播放mp4