FuncAnimation Matplotlib难度

时间:2014-11-21 23:02:08

标签: python-2.7 animation matplotlib

我在尝试让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,我无法弄清楚错误在哪里。任何帮助表示赞赏。

感谢。

1 个答案:

答案 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()