Анимация Matplotlib: интерактивный зум / панорамирование с блиттингом не работает - PullRequest
0 голосов
/ 20 февраля 2019

Я обнаружил странную проблему с FuncAnimation в matplotlib при использовании блиттинга.Следующий код представляет собой минимальный рабочий пример, который перемещает точку вдоль синусоидальной линии.Проблема заключается в том, что после интерактивного масштабирования / панорамирования оси перерисовываются, но линейный график остается в своем исходном положении на экране.Кажется, что по какой-то причине зум / панорамирование не запускает новую инициализацию блитинга.Я использую бэкэнд Qt5Agg с matplotlib 3.0.2, но проблема также присутствует в бэкенде TkAgg.Возможный обходной путь - заставить функцию update также вернуть линейный график.Однако это как-то срывает идею блинтинга.Знаете ли вы лучшее решение этой проблемы?

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.animation

t = np.linspace(0, 10, 100)
y = np.sin(t)

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)

line, = ax.plot(t, y)
point, = ax.plot(0, 0, 'o')


def update(i):
    point.set_data([t[i], y[i]])
    return point,


ani = mpl.animation.FuncAnimation(fig, update, frames=t.size, blit=True)
plt.tight_layout()
plt.show()

1 Ответ

0 голосов
/ 21 февраля 2019

Благодаря помощи ImportanceOfBeingErnest я нашел следующее решение:

ax.callbacks.connect('xlim_changed', lambda event: ani._blit_cache.clear())
ax.callbacks.connect('ylim_changed', lambda event: ani._blit_cache.clear())

Я попытаюсь подать патч для FuncAnimation.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...