FuncAnimation超越了frame参数

时间:2014-10-05 11:26:15

标签: python matplotlib

我使用FuncAnimation软件包制作高斯波包的电影,使用有限差分实空间方法与潜在障碍物碰撞来解决薛定谔方程。相关代码如下。基本上,当我运行它时,一切运作良好 - 一个电影弹出显示我想要的东西。但是,更改" frames ="参数实际上并没有改变帧数。您可以看到我在我的animate函数中打印当前迭代。此计数器上升到" frames ="中指定的数字,但随后返回0并继续运行。动画运行得比指定的更远。即使我指定" frames = 1",电影也会无限期地继续(我试着让它运行一个下午)。我对于发生了什么感到很难过,但我相对肯定它是愚蠢的。

# Set up the matplotlib figure and axes
fig = plt.figure()
ax = plt.axes(xlim = (0, hamiltonian.L), ylim = (0, 3))
line, = ax.plot([], [], lw = 2)
time_text = ax.text(.02, .95, '', transform=ax.transAxes)
ax.grid()

def init():
    """initialize the animation"""
    line.set_data([], [])
    time_text.set_text('')

    return line, time_text

def animate(i):
    """actually perform the animation"""
    print i
    global hamiltonian, wavepacket
    hamiltonian.propagate(wavepacket)
    line.set_data(wavepacket.x, wavepacket.psi_sq)
    time_text.set_text('time = %.3f' % wavepacket.time_elapsed)

    return line, time_text

# Now call the animator
anim = animation.FuncAnimation(fig, animate, init_func=init, frames=100, interval=1, blit=False)
#anim.save('gaussian_reflection.mp4', fps=150, extra_args=['-vcodec', 'libx264'])
plt.show()

1 个答案:

答案 0 :(得分:10)

默认情况下,动画函数循环,只需使用repeat kwarg:

anim = animation.FuncAnimation(fig, animate, init_func=init, frames=100, interval=1, blit=False, repeat=False)