2017-06-11 71 views
0

你好,我想要有python輪廓animation.for例子每秒鐘一個波將從中心誕生並傳播到周邊。但我只想要它與[0.0, 0.8]級別的波。輪廓和顏色均可,但動畫效果不佳。如果有人能幫助我嗎?最後我想是這樣的:帶contourf()動畫的2D行波?

2D Traveling Wave

有誰知道如何使時間和我的功能之間的聯繫?每當輪廓發生變化時,我已經使用time模塊生成,但它不起作用。

%pylab nbagg 
import matplotlib.pyplot as plt 
import numpy as np 
import matplotlib.animation 
import matplotlib.animation as animation 

#### generate some x,y,z data #### 
r = np.linspace(0,6, num=100) 
phi = np.linspace(0, 2*np.pi, num=200) 
R, Phi = np.meshgrid(r,phi) 
x = R*np.cos(Phi) 
y = R*np.sin(Phi) 
z = R 
################################## 

fig, ax=plt.subplots() 

def data(x,y,z,i): 

    x = R*np.cos(Phi) 
    y = R*np.sin(Phi) 
    z = R-i 
    return z 

def draw(i): 
     Z = data(x,y,z,i) 
     colors=('y','b') 

     levels = [0.0,0.8] 
     contourf(x,y,z,colors=('b', 'b', 'b', 'b', 'b', 'b', 'b','b')) 
     contourf(x,y,Z,levels=levels,colors=('y', 'b', 'b', 'b', 'b', 'b', 'b','b')) 
     #colorbar() 


def animate(i): 
     ax.clear() 
     draw(i) 
     return ax, 

draw(0)  


ani = animation.FuncAnimation(fig,animate,np.arange(1, 10, .1),interval=5, blit=True) 


plt.show() 

回答

0

在你行

ani = animation.FuncAnimation(fig,animate,np.arange(1,10),interval=5, blit=True) 

只需添加一個步驟的np.arange()這樣:np.arange(1, 10, .1)

最後一個參數決定增量。在你的情況np.arange()產生陣列

[1, 2, 3, 4, 5, 6, 7, 8, 9] 

和動畫功能,那麼表明在這些時間的情節。通過將步長從默認值1減小到0.1,動畫功能在時間上評估圖形

[1, 1.1, 1.2,..., 8.8, 8.9] 

使動畫更平滑。

編輯:添加多個輪廓。

使用for循環,我添加了一些輪廓,並將它們及時移回,以便它們在動畫開始後的一段時間出現。

%pylab nbagg 
import matplotlib.pyplot as plt 
import numpy as np 
import matplotlib.animation 
import matplotlib.animation as animation 

#### generate some x,y,z data #### 
r = np.linspace(0,6, num=100) 
phi = np.linspace(0, 2*np.pi, num=200) 
R, Phi = np.meshgrid(r,phi) 
x = R*np.cos(Phi) 
y = R*np.sin(Phi) 
z = R 
################################## 

fig, ax=plt.subplots() 

def data(x,y,z,i): 

    x = R*np.cos(Phi) 
    y = R*np.sin(Phi) 
    z = R-i 
    return z 

def draw(i): 
     colors=('y','b') 
     levels = [0.0,0.8] 
     contourf(x,y,z,colors=('b', 'b', 'b', 'b', 'b', 'b', 'b','b')) 
     for j in np.linspace(0, 6, 8)[::2]: 
       Z = data(x,y,z,i-j) 
       contourf(x,y,Z,levels=levels,colors=('y', 'b', 'b', 'b', 'b', 'b', 'b','b')) 
     #colorbar() 


def animate(i): 
     ax.clear() 
     draw(i) 
     return ax, 

draw(0)  


ani = animation.FuncAnimation(fig,animate,np.arange(1,7, .1),interval=5, blit=1) 


plt.show() 
+0

好吧,它使波慢。但是我想要另一波,而第一波還在旅行。 –

+0

對不起,我從你的帖子不明白。希望我可以拿出smth :) – Hami

+0

我已經使用time.leep()每秒產生輪廓,但它does not工作。 –