2017-06-18 16 views
3

を返す私はこのPythonコードを持っている:matplotlibのは、空のプロット

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

n = 100 
x = np.random.randn(n) 

def update(curr): 
    if curr == n: 
     a.event_source.stop() 
    plt.cla() 
    bins = np.arange(-4,4,0.5) 
    plt.hist(x[:curr],bins = bins) 
    plt.gca().set_title('Samplng the Normal distribution') 
    plt.gca().set_ylabel('Frequency') 
    plt.gca().set_xlabel('Value') 
    plt.annotate('n = {}'.format(curr), [3,27]) 

fig = plt.figure() 
a = animation.FuncAnimation(fig, update, interval = 100) 

それはすべての3が描くが、私はそれを実行したときに、私のプロットは空で、何も起こらない正規分布のプロットを更新する必要があります。なぜなのかご存知ですか?

ありがとうございました!

答えて

2

問題のコードは完全です。 100ミリ秒ごとにプロットを更新します。

私の推測は次のようになります。ここでplt.show()を使用していないのにプロットが表示されているということは、インライン環境で使用していることを示しています。例えば。あなたはJupyterを使用しているかもしれませんし、%matplotlib inlineを(意図的に)持っていないかもしれません。インラインバックエンドはアニメーションをサポートしていません(プロットのpngイメージしか表示されないので、明らかです)。したがって、ソリューションは異なるバックエンドを使用する可能性があります。

jupyterのノートブックの場合:

  • あなたはノートブック内のアニメーションを持つようにしたい場合は、%matplotlib notebookを使用しています。あなたは%matplotlib inlineはmatplotlibの2.1以上持っているノートブック使用内のアニメーションを持っているしたい場合は
  • 、あなたはまた、アニメーションを表示するには

    IPython.display import HTML 
    HTML(ani.to_jshtml()) 
    

    から使用することができます。

  • アニメーションを独自のウィンドウとして使用する場合は、%matplotlib tkを使用します。スクリプトとしてコードを実行している場合

  • は、コードの末尾にplt.show()を追加します。スパイダー

    • で実行している場合

    あなたは作り付けのIPythonコンソールでコードを実行していないことを確認してください。代わりに新しい専用のPythonコンソールで実行してください。
    enter image description here

+0

実際にバックエンドだったと思いますが、あなたは正しいです。私はそれを自動に変更し、今すぐ動作します。ありがとう! –

1

最後にplt.show()が見つかりません。この指示は私に働いています。

関連する問題