Очистка графика перед повторным построением matplotlib

У меня есть небольшое приложение, которое позволяет мне изменять входное значение с помощью виджета масштаба tKinter и смотреть, как график реагирует на различные изменения входных данных. Каждый раз, когда я перемещаю шкалу, она привязывается к событию, которое повторно выполняет вычисления для списка и повторяет графики. Это как-то медленно.

Теперь я перерисовываю все это, но оно накладывает одну ось поверх другой, сотни после нескольких минут использования.

deltaPlot = Figure(figsize=(4,3.5), dpi=75, frameon=False)
c = deltaPlot.add_subplot(111)
c.set_title('Delta')
deltaDataPlot = FigureCanvasTkAgg(deltaPlot, master=master)
deltaDataPlot.get_tk_widget().grid(row=0,rowspan=2)

и основной цикл работает

c.cla()
c.plot(timeSpread,tdeltas,'g-')
deltaDataPlot.show()

Он очищает исходный график, но, как я уже сказал, оси складываются (потому что он каждый раз перерисовывает одну, соответствующую слегка измененным точкам данных). Кто-нибудь знает исправление?


person Jared    schedule 06.08.2012    source источник
comment
Не могли бы вы добавить пример рабочего кода? Например, что такое master?   -  person jmetz    schedule 06.08.2012


Ответы (1)


Чтобы улучшить скорость, вы можете сделать несколько вещей:

Или Запустите метод remove на линии, созданной plot:

# inside the loop
line, = c.plot(timeSpread,tdeltas,'g-')
deltaDataPlot.show()
...
line.remove()

Или повторно используйте линию, соответствующим образом обновив ее координаты:

# outside the loop
line, = c.plot(timeSpread,tdeltas,'g-')

# inside the loop
deltaDataPlot.show()
line.set_data(timeSpread,tdeltas)

Документацию по Line2d можно найти здесь.

Вы также можете прочитать статью кулинарной книги по анимации.

ХТН

person pelson    schedule 06.08.2012