我正在使用matplotlib.animation创建一个4 bar的链接。在arrX#和arrY#变量中,我具有行的x&y(每行360个值)。我正在使用matplotlib网站上的标准模板。 在一个可变帧从0到359的循环中,一切都很好。但是,当它进行第二个循环时,最后一个循环末尾的图像(帧= 359)将保留在绘图上。在每个下一个图的末尾,将一次又一次地绘制它。
如何重置图或如何消除循环末尾的旧线?
代码在下面。 该图显示了两组线,其中一组线是静态的,不会消失,并在每个循环结束时一次又一次地重新绘制。
from matplotlib.animation import FuncAnimation
fig, ax = plt.subplots()
ln1, = plt.plot([], [], '-r')
ln2, = plt.plot([], [], '-b')
ln3, = plt.plot([], [], '-g')
def init():
ax.set_xlim(-100, 300)
ax.set_ylim(-100, 200)
return ln1,ln2,ln3
def update(frame):
xdata=(arrX2[frame])
ydata=(arrY2[frame])
ln1.set_data([0,xdata], [0,ydata])
ln2.set_data([xdata,arrX3[frame]],[ydata,arrY3[frame]])
ln3.set_data([d,arrX3[frame]],[0,arrY3[frame]])
return ln1,ln2,ln3
ani = FuncAnimation(fig, update, frames=range(0,360,1), init_func=init, blit=True,interval=1)
plt.show()
答案 0 :(得分:0)
当我创建“可验证的示例”时,我发现了问题。 最初,我的 init()函数是这样的:
def init():
ax.set_xlim(-100, 300)
ax.set_ylim(-100, 200)
return ln1,ln2,ln3
这是错误的。此函数应仅容纳空对象,以便动画师可以在此处查看并查看需要在 update()函数中的每一帧上更新哪些对象。
否则,在我的示例中,“视频卷轴”结束时,并且重新初始化的时间到了,它只是绘制了最后一个已知的线对象。
在 init()函数中,我只保留了空行对象。这行得通。
def init():
ln1, = plt.plot([], [], '-r')
ln2, = plt.plot([], [], '-b')
ln3, = plt.plot([], [], '-g')
return ln1,ln2,ln3,
我确信这是一个错误。如果不是,我就是不知道。
P.S。由于这是语法错误,因此不确定是否需要将其保留在此处。我让更多有经验的用户来决定:)