21

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グラフを持ち、
  • …最初にインタラクティブモードを強制的にオンにせずに(グラフの自動更新を強制しないようにするため、時間がかかる可能性があります)?
4

2 に答える 2

16

これは、Matplotlibメーリングリストでのこのテーマに関する興味深い議論の要約です。エグゼクティブサマリーは次のとおりです。

  • インタラクティブモード(でアクティブ化ion())は多くのことを自動化します。特に、pyplot.*コマンドは画面上で関連する軸を自動的に更新します。ax.plot()ただし、 ( Axesオブジェクトである)などのMatplotlibオブジェクトに対するメソッド呼び出しは、ax通常、自動更新を実行しません。この場合、pyplot.draw()必要な更新を実行します。)

  • 非対話型モードはあまり便利ではありません。 通常、画面上の図は更新されdraw()ません。非対話型モードでいくらか「非アクティブ」であるという事実draw()は、現在のドキュメントには記載されていませんが、近いうちに含まれることを願っています。

それまでの間、インタラクティブモードと非インタラクティブモードの詳細については、Matplotlibの現在のブランチをご覧ください。、および友人のためのより良いドキュメントも同じブランチにあります。draw()show()

于 2011-06-22T20:50:33.183 に答える
4

「トーマスK」の最後のコメントに従うことをお勧めします。メーリングリストで同様の質問を覚えていますが、数分間検索しても見つかりませんでした。ごめん。

私もこの問題を抱えていました、そして私にとってより簡単な方法は/を使用することipython --pylabでした。に問題がある、はるかに古いバージョンのmatplotlibがインストールされていますion()。これに加えて、matplotlibにはdraw()Windowsでいくつかの問題がありました。多分それは最後のバージョンで修正されました。

ps:申し訳ありませんが、私はあなたを本当にうまく助けることができませんでした。

よろしくお願いします。

于 2011-05-25T23:43:35.613 に答える