2017-07-17 32 views
1

hereという基本アニメーションチュートリアルに従って、フレームごとに機能を評価するのではなく、既に計算されたデータセットを表示するように調整しようとしています。私のデータセットは時間の経過と共にXY座標を含んでいます。リストに含まれていますsatxpossatyposデータセットの始めから終わりまでのラインをトレースし、0.1秒ごとに1つの新しいポイントを表示するアニメーションを作成しようとしています。私が間違っているところに助けがありますか?matplotlibアニメーション散布図

from matplotlib import pyplot as plt 
from matplotlib import animation 
import numpy as np 

Code here creates satxpos and satypos as lists 

fig = plt.figure() 
ax = plt.axes(xlim=(-1e7,1e7), ylim = (-1e7,1e7)) 
line, = ax.plot([], [], lw=2) 

def init(): 
    line.set_data([], []) 
    return line, 

def animate(i): 
    line.set_data(satxpos[i], satypos[i]) 
    return line, 

anim = animation.FuncAnimation(fig, animate, init_func=init, 
           frames = len(satxpos), interval = 1, blit=True) 

編集:コードはエラーなく実行されますが、ポイント/ラインが表示されずアニメーションが表示されない空のプロットウィンドウが生成されます。データセットは正しく生成され、静的プロットで良好に表示されます。

+0

これはあなたのコードのすべてですか?実行時にエラーメッセージが表示されますか? – cosinepenguin

+0

これはすべてのコードではなく、satxposとsatyposを生成する部分が有効なデータセットを作成します。私はそれらを静的なプロットとして見ることができます。コードはエラーなしで実行されますが、生成されたプロットは空白のウィンドウにすぎず、アニメーションやポイント/ラインは表示されません。 –

+0

コードのある時点で 'anim.save()'と 'plt.show()共有していないのですか? – cosinepenguin

答えて

3

!)

上記の操作でラインプロットを取得して拡張する必要があるように、コードの他の部分はすべて問題なく表示されます。 intervalを1より大きい値に設定すると、1ミリ秒のタイムステップ(ビットが速すぎる可能性があります)が発生する可能性があります。私はinterval = 40を使用すると良いスタートかもしれないと思います。

+0

の周りを移動する単一の点が表示されます。ありがとうございました! –

1

コードは正しいようです。 satxposとsatyposの両方が正しく設定され、初期化されている限り、私は他のすべてが有効だと信じています!

、あなたの質問には表示されませんコードの一部は、あなたのコードが動作するために、両方必要なanim.save()plt.show()関数の呼び出し(共有チュートリアルに従って!)

あなたが希望ですしたがって、次のようなものを追加する必要があります:

anim.save('basic_animation.mp4', fps=30, extra_args=['-vcodec', 'libx264']) 

plt.show() 

アニメーションを作成するには、アニメーションを作成する必要があります(私は推測します)。

希望すると助かります!

Source - Matplotlib Animation Tutorial

1

私はあなたが言及しました「satxposとsatyposを生成する部分は有効なデータセットを作成してください。私はちょうど罰金静的プロットとしてそれらを表示することができます」。しかし、私の推測はまだあなたのsatxpossatyposに由来する問題です。

2つの機能とアニメーションコードをline.set_data(satxpos[i], satypos[i])に置き換えてトラブルシューティングを行う方法があります。 i0,1と設定し、プロットが見えるかどうか確認してください。そうでない場合は、satxpossatyposは、あなたが主張しているほど有効ではありません。

例として、有効なsatxpossatyposは次のようになります

x = np.array([np.linspace(-1e7, 1e7, 1000)]) 
i = 200 
satxpos = x.repeat(i, axis=0) 
satypos = np.sin(2 * np.pi * (satxpos - 0.01 * np.arange(i).reshape(-1, 1).repeat(satxpos.shape[1], axis=1))) 
satypos *= 1e7/2 

これは、あなたは、このようにあなたは私たちが罰金であることを示してきたコードを示す提供されているコードで動作します。コメントへの応答で

編集:

あなたsatxpossatyposはちょうどnp.linespaceている場合は、アニメーションループは(satxpos[i], satypos[i])でただ一点を取得し、あなたはmarker='o'のような設定をせずに、プロット上の点は表示されません。したがって、アニメーションには何も表示されません。

line.set_data(satxpos[:i], satypos[:i]) 

:注:あなたがインデックスタイムステップごとに1つの以上の要素を含むようにあなたのアレイのだろう「最後までデータセットの先頭から始まるラインをトレース」するために