2017-12-29 23 views
1

私は、[2000][200,3]という形式の配列の配列を持っており、アニメーション散布図を作成しています。 2000はフレームの数であり、内部配列は、散布する点である形式[length, [x,y,inten]]を有する。だから我々は、200ポイントごとの2000のフレームを持って現在、静的フレームで散布図をアニメーション化しています。代わりに動いているウィンドウの上を動かす方法はありますか?

Array[0]=np.array([x_1,y_1,I_1],[x_2,y_2,I_2],...,[x_200,y_200,I_200]) 

: だから例えば、単一のフレームは次のようになります。これらのポイントは、200ごとに任意に切り捨てられ、実際にはシーケンシャルです。だから私は実現可能な配列を再構成することができます:

Array=np.array(np.array([x_1,y_1,I_1],[x_2,y_2,I_2],...,[x_400000,y_400000,I_400000]) 

私にとっては問題ありません。私はこれを行う方法を知っています。

私の質問は、200ポイントのビンを表示するのではなく、ポイントを適応的に移動する散布図をアニメーション化する方法です。以下のコードでは、フレーム(1-200,201-400,401-600など)でアニメーション散布図をプロットすることができますが、結果はあまり目には滑らかではありません。理想的には、あらゆる点で少なくとも10ポイントごとにアップデートするものが好きです。フレーム(1-200,2-201,3-202など)または(1-200,11-210,21-200など) )

numframes=len(Array) 

plt.ion() 
fig, ax = plt.subplots() 

norm = plt.Normalize(Array[:][:,2].min(), Array[:][:,2].max()) 
sc = ax.scatter(Array[0][:,0], Array[0][:,1], c=Array[0][:,2], cmap=cm.hot, s=5) 

plt.xlim(-40,40) 
plt.ylim(0,200) 
plt.draw() 
for i in range(numframes): 

    sc.set_offsets(np.c_[Array[i][:,0], Array[i][:,1]]) 
    sc.set_array(Array[i][:,2]) 
    print(i) 
    plt.pause(0.1) 

plt.ioff() 
plt.show() 
+0

ビニングの200の与えられたステップサイズとウィンドウとの点の私の配列によるです。 200より小さいビンに[配列をスライスする方法](https://stackoverflow.com/questions/509211/understanding-pythons-slice-notation)をお願いしていますか?いずれにしても、[最小限の、完全で検証可能な例](https://stackoverflow.com/help/mcve)を提供してください。通常、問題の簡略化されたバージョンを思いつくことは、あなた自身で解決するのに役立ちます。 –

答えて

0

手順以下のコード連続代わりに離散的に私はそれが非常に困難なものを自分の問題を理解するために見つけるごとに200

stepsize=10 
NewArray=np.ravel(Array) 
NewArray.reshape(2000*200,3) 

plt.ion() 
fig, ax = plt.subplots() 
norm = plt.normalize(NewArray[:,2].min(), NewArray[:,2].max()) 
sc = ax.scatter(NewArray[0:200,0], NewArray[0:200,1], c=NewArray[0:200,2], cmap=cm.jet, s=5) 
plt.xlim(-40,40) 
plt.ylim(0,200) 
plt.draw() 
for i in range(len(NewArray//stepsize)-200): 
    sc.set_offsets(np.c_[NewArray[(i*stepsize):(i*stepsize)+200,0],\ 
          NewArray[(i*stepsize):(i*stepsize)+200,1]]) 
    sc.set_array(NewArray[(i*stepsize):(i*stepsize)+200,2]) 

    plt.pause(0.1) 

plt.ioff() 
plt.show() 
+0

「イオン」の代わりに「FuncAnimation」を使用することを検討してください。 – ImportanceOfBeingErnest

関連する問題