2014-10-05 75 views
7

我使用FuncAnimation包使用有限差分實空間方法來求解薛定諤方程,從而製作高斯波包的電影與勢壘碰撞的電影。相關代碼如下。基本上,當我運行它時,一切運行良好 - 一部電影彈出來顯示我想要的。但是,更改「frames =」參數實際上並不會改變幀的數量。你可以看到我在我的animate函數中打印了當前的迭代。該計數器上升到「frames =」中指定的數字,但是然後返回到0並繼續。動畫運行得比指定的更遠。即使我指定「frames = 1」,電影也會無限期地繼續播放(我試着讓它在一個下午運行)。我非常難以理解發生了什麼,但我相對確定這是愚蠢的。FuncAnimation通過幀參數

# 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() 

回答

8

默認情況下,動畫功能循環,只需使用repeat kwarg:

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

解決了,謝謝。 – 2014-10-06 12:07:53