Matplotlib动画:交互式缩放/平移与blitting不起作用

问题描述 投票:1回答:1

当使用blitting时,我在matplotlib中发现了FuncAnimation的一个奇怪问题。以下代码是一个最小的工作示例,它沿着正弦线移动一个点。问题是,在交互式缩放/平移操作之后,轴会重新绘制,但是线条图保留在屏幕上的原始位置。似乎由于某种原因,缩放/平移不会触发blitting的新初始化。我正在使用带有matplotlib 3.0.2的Qt5Agg后端,但问题也出现在TkAgg后端。一种可能的解决方法是使函数更新也返回线图。然而,这不知何故挫败了blitting的想法。你知道更好的解决这个问题吗?

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()
python matplotlib
1个回答
1
投票

感谢ImportanceOfBeingErnest的帮助,我找到了以下解决方案:

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

我将尝试为FuncAnimation提交补丁。

© www.soinside.com 2019 - 2024. All rights reserved.