インタラクティブフィギュア#
データを操作する場合、インタラクティブ性は非常に重要です。多くの場合、Matplotlib GUI ウィンドウに組み込まれているパン/ズーム ツールとマウス位置ツールで十分ですが、イベント システムを使用して、カスタマイズされたデータ探索ツールを構築することもできます。
Matplotlibには、いくつかの GUI ツールキット (Qt、Tk、Wx、GTK、macOS、JavaScript) にバインドするバックエンドが同梱されており、サードパーティ パッケージは kivyおよびJupyter Labへのバインドを提供します。Figure がマウス、キーボード、およびペイント イベントに応答するようにするには、GUI イベント ループを対話型プロンプトと統合する必要があります。IPython の使用をお勧めします (以下を参照)。
このpyplot
モジュールは、対話型ツール、ツールバー、ツールチップ、および
キー バインディングを含む Figure を明示的に作成するための関数を提供します。
pyplot.figure
新しい空を作成する
Figure
か、既存の図を選択しますpyplot.subplots
pyplot
には、 からアクセスできる「現在の図」pyplot.gcf
の概念と、 からアクセスできる「現在の軸」の概念がありますpyplot.gca
。のほとんどすべての関数は、必要に応じて現在の/ (または作成) をpyplot
通過します。Figure
Axes
Matplotlib は、pyplot.figure
orを介して作成されたすべての開いている Figure への参照を保持するため、Figure はpyplot.subplots
ガベージ コレクションされません。s は、を介して個別
Figure
にクローズおよび登録解除できます。すべての open は、 を介して閉じることができます。pyplot
pyplot.close
Figure
plt.close('all')
Matplotlib のイベント システムと統合されたイベント ループの詳細については、以下をお読みください。
IPython 統合#
対話型シェルには IPython を使用することをお勧めします。すべての機能 (改善されたタブ補完、マジック、複数行編集など) に加えて、GUI ツールキットのイベント ループがコマンド ラインと適切に統合されていることも保証されます (コマンド プロンプトの統合を参照)。
この例では、IPython プロンプトを介して Figure を作成および変更します。Figure は QtAgg GUI ウィンドウに表示されます。統合を構成し、インタラクティブ モード%matplotlib
を有効にするには、次のマジックを使用し
ます。
In [1]: %matplotlib
Using matplotlib backend: QtAgg
In [2]: import matplotlib.pyplot as plt
新しい Figure ウィンドウを作成します。
In [3]: fig, ax = plt.subplots()
データのライン プロットをウィンドウに追加します。
In [4]: ln, = ax.plot(range(5))
線の色を青からオレンジに変更します。
In [5]: ln.set_color('orange')
プロットの自動再描画を無効にしたい場合:
In [6]: plt.ioff()
プロットの自動再描画を再度有効にしたい場合:
In [7]: plt.ion()
Matplotlib
との最近のバージョンでは、 をインポートして呼び出すIPython
だけで十分です。魔法の使用は、Matplotlib と IPython のすべてのバージョンで動作することが保証されています。matplotlib.pyplot
pyplot.ion
%
インタラクティブモード#
対話モードを有効にします。 |
|
対話モードを無効にします。 |
|
プロット コマンドごとにプロットが更新されるかどうかを返します。 |
開いているすべての Figure を表示します。 |
|
interval秒間、GUI イベント ループを実行します。 |
インタラクティブ モード コントロール:
作成した図形を自動的に表示するかどうか
アーティストへの変更が既存の図の再描画を自動的にトリガーするかどうか
when
pyplot.show()
引数が指定されていない場合: 即時、またはすべての図が閉じられた後
対話モードの場合:
新しく作成された図はすぐに表示されます
要素が変更されると、図は自動的に再描画されます
pyplot.show()
数値を表示し、すぐに戻ります
対話モードでない場合:
新しく作成された図と図への変更は、表示されるまで表示されません。
pyplot.show()
と呼ばれるpyplot.pause()
と呼ばれる
pyplot.show()
GUI イベント ループを実行し、すべてのプロット ウィンドウが閉じられるまで戻りません。
非インタラクティブ モード (または非インタラクティブ モードで作成された Figure) を使用している場合pyplot.show
は、画面にウィンドウを表示するために明示的に呼び出す必要がある場合があります。GUI イベント ループを一定時間だけ実行したい場合は、 を使用できますpyplot.pause
。これにより、 を呼び出したかのようにコードの進行がブロックされ
time.sleep
、現在のウィンドウが表示され、必要に応じて再描画され、GUI イベント ループが指定された時間だけ実行されます。
コマンド プロンプトに統合されている GUI イベント ループと、対話モードの Figure は互いに独立しています。pyplot.ion
イベント ループの統合を使用していても調整していない場合、図は表示されますが、プロンプトが入力を待機している間は対話型になりません。パン/ズームができず、Figure がレンダリングされない場合もあります (ウィンドウが黒、透明、またはその下のデスクトップのスナップショットとして表示される場合があります)。逆に、イベント ループ統合を構成すると、pyplot の「対話モード」に関係なく、プロンプトでの入力を待機している間、表示される図が応答します。
インタラクティブ モード設定とイベント ループ統合のどのような組み合わせであってもpyplot.show(block=True)
、 、pyplot.pause
、または GUI メイン ループを他の方法で実行すると、Figure は応答します。
警告
これを使用Figure.show
すると、イベント ループを開始せずに、また対話モードにならずに、画面に Figure を表示することができます。これは (GUI ツールキットによっては) 機能する可能性がありますが、応答しない Figure になる可能性があります。
デフォルトの UI #
によって作成されたウィンドウにpyplot
は、ナビゲーション ボタンとカーソルが指しているデータ値の読み出しを備えた対話型のツールバーがあります。便利なキーバインドがデフォルトで多数登録されています。
その他の Python プロンプト#
インタラクティブ モードは、デフォルトの Python プロンプトで動作します。
>>> import matplotlib.pyplot as plt
>>> plt.ion()
>>>
ただし、これはイベント フックが適切にインストールされていることを保証するものではなく、Figure が応答しない可能性があります。詳細については、GUI ツールキットのドキュメントを参照してください。
Jupyter ノートブック / JupyterLab #
ノート
ここで説明するインタラクティブな機能を利用するには、インタラクティブなバックエンドを使用している必要があります。ノートブックの既定のバックエンドであるインライン バックエンドはそうではありません。backend_inline
Figure を 1 回レンダリングし、セルの実行時に静的イメージをノートブックに挿入します。画像は静的であるため、パン/ズームしたり、ユーザー入力を取得したり、他のセルから更新したりすることはできません。
「クラシック」ノートブックまたは Jupyter ラボでインタラクティブな図を取得するには、 ipywidgetフレームワークを使用するipymplバックエンド (別途インストールする必要があります) を使用します。がインストールされている場合は、魔法を使用します。ipympl
%matplotlib widget
選択して有効にします。
クラシックノートブックのみを使用する必要がある場合は、使用できます
%matplotlib notebook
backend_nbagg
Matplotlib が提供するバックエンドを使用します。ただし、nbagg は Jupyter Lab では機能しません。
GUI + Jupyter #
ipympl
Jupyter Notebook で非 GUI バックエンドの 1 つを使用することもできます。Jupyter カーネルをローカルで実行している場合、Web ブラウザーに隣接するデスクトップに GUI ウィンドウが表示されます。リモート サーバーでノートブックを実行すると、カーネルはリモート コンピューターで GUI ウィンドウを開こうとします。xserver をデスクトップに転送するように手配しない限り、ウィンドウを表示したり操作したりすることはできません。また、例外が発生する場合もあります。
PyCharm、Spyder、および VSCode #
多くの IDE には Matplotlib との統合が組み込まれています。構成の詳細については、それらのドキュメントを参照してください。