Перерисовка ползунка matplotlib не обновляет figtext - PullRequest
3 голосов
/ 23 августа 2011

Я использовал ползунки в 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 Ответ

4 голосов
/ 23 августа 2011

Каждый раз, когда вы вызываете 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...