使用blitting时,我在matplotlib中发现了FuncAnimation的一个奇怪问题。以下代码是一个最小的工作示例,它使点沿着正弦线移动。问题在于,在交互式缩放/平移操作之后,轴已重绘,但线图仍保留在屏幕上的原始位置。似乎由于某种原因,缩放/平移不会触发闪烁的新初始化。我在Matplotlib 3.0.2中使用Qt5Agg后端,但是TkAgg后端也存在问题。可能的解决方法是使函数更新也返回折线图。但是,这以某种方式挫败了发条的想法。您知道解决此问题的更好方法吗?
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()
答案 0 :(得分:0)
借助ImportanceOfBeingErnest的帮助,我找到了以下解决方案:
ax.callbacks.connect('xlim_changed', lambda event: ani._blit_cache.clear())
ax.callbacks.connect('ylim_changed', lambda event: ani._blit_cache.clear())
我将尝试为FuncAnimation提交补丁。