2014-02-15 40 views
1

我想要顯示虛擬機相對於時間t的大小。在下面的程序中,t被設置爲零。如果能告訴我如何產生雙線性插值等高線圖的動畫,我將不勝感激。謝謝! 請這裏是代碼:如何動畫由雙線性插值生成的等高線圖?

import numpy as np 
from numpy import cos, sin, pi, exp, sqrt 
from matplotlib import pyplot as plt 
import matplotlib.cm as cm 

nx=30 
ny=30 

nu=0.0025 
p=2*pi 

x = np.linspace(0,p,nx) 
y = np.linspace(0,p,ny) 

fig,ax = plt.subplots(1,1) 
ax.set_xlim(0,p) 
ax.set_ylim(0,p) 

t=0 
X,Y = np.meshgrid(x,y) 
U=-cos(X)*sin(Y)*exp(-2*nu*t) 
V=sin(X)*cos(Y)*exp(-2*nu*t) 
VM=sqrt(U**2+V**2) 

im = plt.imshow(VM, interpolation='bilinear', origin='lower', 
      cmap=cm.gray, extent=(0, p, 0, p)) 
levels = np.arange(-1.2, 1.6, 0.2) 

# add a vertical colorbar. 
CBI = plt.colorbar(im, orientation='vertical', shrink=0.8) 
plt.show() 

回答

1

大多來自here複製。請參閱深入解釋。

import numpy as np 
from numpy import cos, sin, pi, exp, sqrt 
from matplotlib import pyplot as plt 
import matplotlib.cm as cm 
from matplotlib import animation 

nx=30 
ny=30 

nu=0.0025 
p=2*pi 

x = np.linspace(0,p,nx) 
y = np.linspace(0,p,ny) 

fig,ax = plt.subplots(1,1) 
ax.set_xlim(0,p) 
ax.set_ylim(0,p) 

t=0 
X,Y = np.meshgrid(x,y) 
U=-cos(X)*sin(Y)*exp(-2*nu*t) 
V=sin(X)*cos(Y)*exp(-2*nu*t) 
VM=sqrt(U**2+V**2) 

im = plt.imshow(VM, interpolation='bilinear', origin='lower', 
      cmap=cm.gray, extent=(0, p, 0, p)) 
levels = np.arange(-1.2, 1.6, 0.2) 

# add a vertical colorbar. 
CBI = plt.colorbar(im, orientation='vertical', shrink=0.8) 


def init(): 
    im.set_data((np.empty_like(VM))) 
    return im, 

def animate(t): 
    U=-cos(X)*sin(Y)*exp(-2*nu*t) 
    V=sin(X)*cos(Y)*exp(-2*nu*t) 
    VM=sqrt(U**2+V**2) 
    im.set_data(VM) 
    return im, 

# # call the animator. blit=True means only re-draw the parts that have changed. 
anim = animation.FuncAnimation(fig, animate, init_func=init, 
           frames=200, interval=20, blit=True) 

plt.show() 
+0

謝謝你的強大答案!這太妙了! :) –

+0

只是有另一個問題!你知道如何獲得不同顏色的彩條(而不僅僅是灰色)。謝謝! –

+0

將'cmap = cm.gray'更改爲另一個色彩映射表。 [色彩地圖列表](http://wiki.scipy.org/Cookbook/Matplotlib/Show_colormaps) – M4rtini