我在尝试让FuncAnimation在Matplotlib中工作时遇到了一些困难。这是我想要实现的目标。我有linexdata和lineydata
linexdata = [[0, 0.96663913603170604, 1.8304227404767459], [0, 0.96734736607357541, 1.8288493988572816], [0, 0.96802166208581697, 1.8272797290389486], [0, 0.96866363556090329, 1.8257115495669918]]
lineydata = [[0, 0.25614211034477896, 0.76000507255964045], [0, 0.253454282564955, 0.76120840368022669], [0, 0.25086662139992305, 0.76240896996548169], [0, 0.24837624915022258, 0.76361296474589158]]
2个列表的实际长度大约是2000.我只是展示了一些数据点来说明我想要做的事情。
我想为有线数据显示动画。
这是我的代码:
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import animation
fig = plt.figure(figsize=(7,7));
ax = fig.add_subplot(111, aspect='equal', autoscale_on=False, xlim=(-0.5,3), ylim=(-0.5,3))
ax.grid()
line, = ax.plot([], [], 'o-', lw=2)
line.set_data([], []);
def init():
line.set_data([], [])
return line,
def animate(i):
line.set_data(linexdata[i] ,lineydata[i]);
return line,
anim = animation.FuncAnimation(fig, animate, init_func=init, frames=200, interval=20)
plt.show()
输出图表为空。我在某种程度上不能让这个工作主要是因为我不明白如何使用FuncAnimation,我无法弄清楚错误在哪里。任何帮助表示赞赏。
感谢。
答案 0 :(得分:1)
这里发生的是FuncAnimation
递归调用animate
函数。每次它都会增加用于索引数据的变量i,以及1.在调用函数时,递归的数量由参数“frames”控制。
由于您的linexdata列表只包含4个列表,并且考虑到您使用Funcanimation
调用了frames=200
,因此在前4次调用之后,python会与IndexError崩溃。将帧数调整为数据大小是解决问题的方法。
你无法看到任何东西(即不是4条第一行)的原因是因为它可以让我们快速看到任何东西。 interval=20
表示两次调用animate
之间的间隔为20毫秒。例如,将此数字增加到500会让您看到会发生什么。 (为了清楚起见,我可以自由地修改你的列表,以便明确地显示2帧之间的变化。)
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import animation
linexdata = [[0, 0.96663913603170604, 1.8304227404767459], [0, 0.96734736607357541, 2.8288493988572816], [0, 0.96802166208581697, 3.8272797290389486], [0, 0.96866363556090329, 4.8257115495669918]]
lineydata = [[0, 0.25614211034477896, 0.76000507255964045], [0, 0.253454282564955, 0.76120840368022669], [0, 0.25086662139992305, 0.76240896996548169], [0, 0.24837624915022258, 0.76361296474589158]]
fig = plt.figure(figsize=(7,7));
ax = fig.add_subplot(111, aspect='equal', autoscale_on=False, xlim=(-0.5,3), ylim=(-0.5,3))
ax.grid()
line, = ax.plot([], [], 'o-', lw=2)
line.set_data([], []);
def init():
line.set_data([], [])
return line,
def animate(i):
line.set_data(linexdata[i] ,lineydata[i]);
return line,
anim = animation.FuncAnimation(fig, animate, init_func=init, frames=4, interval=500)
plt.show()