如果事件触发器来自另一个数字,更新绘图并不清除旧图?

时间:2017-12-31 07:32:05

标签: python animation matplotlib

我正在更新线图。有一个事件触发器可以启动此更新。如果触发器来自包含绘图的图形,一切都很好。但是,如果触发器来自另一个数字,则会发生奇怪的结果:已更新的行似乎使其迹线未清除。

以下是一个例子:

import matplotlib.pyplot as plt
import numpy as np

def onclick(event):

    for ii in np.linspace(0., np.pi, 100):
        y1 = y * np.sin(ii)
        line1.set_ydata(y1)
        ax.draw_artist(line1)
        line2.set_ydata(-y1)
        ax2.draw_artist(line2)
        ax2.set_ylim(y1.min(), y1.max())
        fig.canvas.update()
        plt.pause(0.1)


x = np.linspace(0., 2*np.pi, 100)
y = np.sin(x)

fig = plt.figure()
ax = fig.add_subplot(1, 2, 1)
line1 = ax.plot(x, y)[0]

ax2 = fig.add_subplot(1, 2, 2)
line2 = ax2.plot(x, y)[0]


fig2 = plt.figure()

cid = fig2.canvas.mpl_connect('button_press_event', onclick)

plt.show()

我在屏幕上看到的内容:

wrong

请注意,如果您调整绘图大小,或将其保存为图形,则所有残留图像都将消失。

另一方面,如果将一行改为:

cid = fig2.canvas.mpl_connect('button_press_event', onclick)

然后是正确的。动画按预期工作。

1 个答案:

答案 0 :(得分:0)

不确定fig.canvas.update()会做什么。如果用

替换该行
fig.canvas.draw_idle()

它应该按预期工作。在这种情况下,您不需要单独绘制艺术家。