python - 使用 matplotlib.animation 在动画结束时绘图不会重置
问题描述
我正在使用 matplotlib.animation 创建一个 4 条连杆。在 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()
解决方案
当我创建一个“可验证的示例”时,我发现了问题。最初我的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,
我确信这是一个错误。如果不是我只是不知道。
PS不确定是否需要将其保留在此处,因为这是语法错误。我把它留给更有经验的用户来决定:)
推荐阅读
- javascript - 主题 ui 嵌入中的高度
- vba - Lookup value in Access table without a unique identifier using VBA
- servicenow - ServiceNow 监听器
- kotlin - 从适配器接收数据到DetailsActivity?
- batch-file - .bat 批处理文件如何从字符串中获取环境变量?
- r - 使用 ggplot 对两个变量进行排序并重新排序
- sql-server - 通过返回重复项聚合不带组
- matplotlib - 取另一个列值在条形图中进行注释
- google-chrome - 使用 MapBox loadImage 函数时,仅在 Chrome 中出现 AWS S3 CORS 错误
- azure - “允许请求者批准他们自己的更改”的描述令人困惑