2016-07-16 45 views
1

pcまたはpciを使用して2dでいくつかの波を進化させてGIFを保存しようとしています(サーフェスまたはワイヤフレームも使用できます)。pcolormeshを効率的にアニメーション化する

これは、これまでのところ、私のaproachされています: は極座標でプロットするquadmeshを設定します。

from matplotlib import pyplot 
from matplotlib.animation import FuncAnimation as FuncAnimation 
pi=np.pi 


rmax=6. 
r=2*np.linspace(0,np.sqrt(rmax*.5),100)**2 
phi=np.linspace(0,2*pi,80) 

R, P = np.meshgrid(r, phi) 
X, Y = R*np.cos(P), R*np.sin(P) 

は、アニメーションのための数字と機能を設定します。 カウントは私が持っているフレームの量です。 Zは、プロットしたい値を持つcount * 2次元配列です。 (それはシリーズのようないくつかのフーリエ変換の合計を持っている)

fig, ax = pyplot.subplots() 
def anim_I(count,r,phi): 
    anim=np.zeros((count,len(phi), len(r))) 
    for i in range(count): 
     anim[i,:,:]=coef_transf(final_coefs[i,:,:,:,0],r,phi)**2 
    return anim 

Z=anim_I(count,r,phi) 
def animate(i): 
    pyplot.title('Time: %s'%time[i]) 
    #This is where new data is inserted into the plot. 
    plot=ax.pcolormesh(X, Y,Z[i,:,:],cmap=pyplot.get_cmap('viridis'),vmin=0., vmax=15.) 
    return plot, 

ax.pcolormesh(X, Y,Z[0,:,:],cmap=pyplot.get_cmap('viridis'),vmin=0., vmax=15.) 
pyplot.colorbar() 

anim = FuncAnimation(fig, animate, frames = range(0,count,7), blit = False) 

私は本当に生きてそれを参照してくださいする必要はありませんので、私はちょうどGIFを保存します。

anim.save('%d_%d_%d-%d.%d.%d-2dgif.gif' %(localtime()[0:6]), writer='imagemagick')  
pyplot.close() 

これは動作しますが、これは100フレームものgifを作るのに1時間かかることがあります。

これを行う正しい方法が何であるかを知ることはできません。そのため、使用することができます。

私はこの点についてもう1つの記事を見ましたが、コードがうまく動作しないか、まったく同じように動作しませんでした。

答えて

0

あなたはこれが新しいオブジェクトにあなたがアニメーションの目的球を呼び出すたびに作成されません

def animate(i): 
pyplot.title('Time: %s'%time[i]) 
#This is where new data is inserted into the plot. 
plot=plot.set_array(Z[i,:,:].ravel()) 
return plot, 

代わりの

def animate(i): 
pyplot.title('Time: %s'%time[i]) 
#This is where new data is inserted into the plot. 
plot=ax.pcolormesh(X, Y,Z[i,:,:],cmap=pyplot.get_cmap('viridis'),vmin=0., vmax=15.) 
return plot, 

を書くことを試みることができます。その代わりに、すでに作成されたオブジェクトのイメージが変更されます。 しかし、set_arrayメソッドはフラット化された配列、つまり.ravel()が必要なようです。

これは、pcolormap関数のシェーディングオプションをshading = 'gouraud'に設定した場合にのみ、正しいイメージを生成します。 私はなぜ、不幸なことに、配列のソートと関係があると思われるのか分かりません。

私は少し助けてくれました。

関連する問題