在动画结束时,使用matplotlib.animation文件

2024-09-30 14:37:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我在用matplotlib.animation文件创建四连杆机构。在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()

enter image description here


Tags: dataplotmatplotlibinitpltaxframe末尾
1条回答
网友
1楼 · 发布于 2024-09-30 14:37:26

当我创建一个“可验证的例子”时,我发现了问题所在。 最初我的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,

我确信这是个错误。如果不是我只是不知道。你知道吗

另外,由于这是一个语法错误,所以不确定是否需要保存在这里。我让更有经验的用户来决定:)

相关问题 更多 >