Matplotlibのpyplotの「インタラクティブモード」のドキュメントには次のように書かれています。
pyplotインターフェイスのインタラクティブなプロパティは、すべてのpyplotコマンドでフィギュアキャンバスを描画するかどうかを制御します。インタラクティブがFalseの場合、figureの状態はすべてのプロットコマンドで更新されますが、draw()の明示的な呼び出しでのみ描画されます。インタラクティブがTrueの場合、すべてのpyplotコマンドが描画をトリガーします。
これは十分に明らかなようです。インタラクティブモードがオンの場合、何もしplot()
なくても実行できますdraw()
。ただし、次のコードでdraw()を実行しても、何も実行されません。
from matplotlib import pyplot as pp
# Interactive mode is off by default
pp.plot([10, 20, 50])
pp.draw()
raw_input('Press enter...') # No graph displayed?!!
(Windows XPでは、Matplotlib 1.0.1)。
最初に追加するion()
と、ユーザーが「Enter」と入力するのを待っている間、図が表示されます(これにより、すべての図が閉じられます)。
from matplotlib import pyplot as pp
ion()
pp.plot([10, 20, 50]) # No draw() is necessary
raw_input('Press enter...') # The graph is interactive *and* the terminal responds to enter
したがって、各プロットコマンドの後にグラフの自動更新を追加するだけでion()
はないように見えますが、残念ながらドキュメントには何も見つかりません。後者のプログラムのもう1つのより重要な問題は、ion()
すべてのプロットコマンドでグラフが更新されることです。これは、1つのグラフが複数回更新される場合に時間がかかります。
だから、次の方法があります:
- ターミナルに入るのを待たせ、その後すべての数字が自動的に閉じられます。
- インタラクティブなMatplotlibグラフを持ち、
- …最初にインタラクティブモードを強制的にオンにせずに(グラフの自動更新を強制しないようにするため、時間がかかる可能性があります)?