【问题标题】:matplotlib animation without predefined list?没有预定义列表的 matplotlib 动画?
【发布时间】:2023-01-08 01:21:07
【问题描述】:
我目前有一个模拟过程,可以在每次迭代时输出一个数据点。我想用 matplotlib 对此进行动画处理,但不确定是否可以使用 matplotlib.animation。
我遇到的许多在线教程/示例总是以预定义点列表开头,例如x = [1,2,3,4,5], y=[5.5,3.6,7.1,2.2,3.3],并基本上为这个列表设置动画。从技术上讲,这对我也适用,但我必须首先运行模拟并将结果附加到列表 x 和 y 中,然后在这些列表上运行动画过程(这将需要再次遍历列表,这在理想情况下毫无意义它应该与模拟阶段一起制作动画。)如果我用数百万次迭代运行模拟,这将很麻烦。
我想知道 mpl.animation 是否可以在数据出现时对其进行动画处理,例如从 x=[], y=[] 开始,然后在第一次迭代中我们得到 x=[0.1], y=[3.3] 并为此设置动画,然后在第二次迭代中我们得到 x=[0.1,0.52], y =[3.3,4.4] 然后我们再次制作动画,依此类推,而不是要求在制作动画之前先填充整个列表。
【问题讨论】:
标签:
python
matplotlib
animation
time-series
real-time
【解决方案1】:
为什么不试试呢?
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
fig = plt.figure()
pltdata, = plt.plot([], [])
plt.ylim(-1.1,1.1)
plt.xlim(0,200)
def animate(i):
x=np.arange(i, i*2+2)
y=np.sin(x*0.1)
pltdata.set_data(x, y)
return [pltdata]
theAnim = animation.FuncAnimation(fig, animate, frames=100, interval=100, blit=True, repeat=False)
plt.show()
如您所见,它不是预定义的列表(本示例可能是预定义列表,但事实并非如此。第一个图是常量 [] 列表。然后 x 和 y 每次都从头开始重新计算animate 电话)。
并按预期工作。
(与动画一样,必须注意xlim 和ylim,因为如果自动选择它们,由于开始时没有数据,它们将不适合未来的未知数据)。