2016-11-11 20 views
1

matplotlibのfuncAnimationクラスを使ってプロットをアニメーション化する方法を学びたいと思います。この例では、無作為に分布した正規分布の2次元散布図を生成し、点を更新するたびにプロットにポイントを追加して(ポイントをアニメーション表示する)例コードは次のとおりです。Matplotlib funcAnimationはプロットを開いたり表示したりしません

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.animation as animation 
import random 

plt.ion() 
fig, ax = plt.subplots() 
scat = ax.scatter([],[]) 
scat.axes.axis([-5, 5, -5, 5]) 

def update(point): 
    array = scat.get_offsets() 
    array = np.append(array, point) 
    scat.set_offsets(array) 
    return scat 

def data_gen(): 
    for _ in range(0,100): 
     point = np.random.normal(0, 1, 2) 
     yield point 

ani = animation.FuncAnimation(fig, update, data_gen, interval=25, blit=False) 
plt.show() 

このコードを実行すると、何も起こりません。端末は数秒間騒がしくなり、何も起こりません。

私はこれを私のガイドとして使用しています:http://matplotlib.org/examples/animation/animate_decay.html、散布図の代わりにラインプロットを使用した場合(本質的に、この例のジェネレータでポイントがどのように生成されるかを置き換えたもの)データを生成してプロットを更新します。しかし、私が望むディスプレイではないので、散布図に現れる点を見たいと思っています。散布図を使用するには、散布図の有効な方法ではないので、set_dataを使用しないでください。この例で見たnp.append()メソッドを使用しています: Dynamically updating plot in matplotlib

私の質問は、このコードではアニメーションが表示されない原因となっていますか?

EDIT: はmywriter = animation.FFMpegWriter(FPSは= 60) ani.save( 'myanimation.mp4'、作家= mywriter) それが作り出すん:私はちょうど私が追加した場合ことが判明/試してみましたアニメーションを含むmp4、私はちょうどコードが実行されているように動的に表示することができません。だからあなたがそれを診断できるなら、その問題に集中してください。ありがとう。

+0

'plt.ion()'行だけを削除すれば、コードはうまく動作します。あなたは何のためにそれを必要としますか?通常、 'ion()'はipythonでプロットするときにのみ使用され、あなたが望むものであれば分かりません。 – ImportanceOfBeingErnest

+0

ありがとう!私はサンプルコードを見ていただけで、すべてのことができました。私はそれがアニメーションに必要だと思った。それはそれを修正! – Zach

答えて

1

将来、@ImportanceOfBeingErnestは、plot.ion()は必要ではなく、ipythonでのプロットに特有のものであると指摘しました。それを削除すると問題が解決されます。

関連する問題