バックエンド#
バックエンドとは?#
Web サイトやメーリング リストの多くのドキュメントは「バックエンド」に言及しており、多くの新規ユーザーはこの用語に混乱しています。Matplotlib は、さまざまなユース ケースと出力形式を対象としています。Python シェルから対話的に Matplotlib を使用し、コマンドを入力するとプロット ウィンドウがポップアップする人もいます。Jupyterノートブックを実行 し、インライン プロットを描画して迅速なデータ分析を行う人もいます。また、Matplotlib を PyQt や PyGObject などのグラフィカル ユーザー インターフェイスに埋め込んで、リッチなアプリケーションを構築する人もいます。バッチ スクリプトで Matplotlib を使用して数値シミュレーションからポストスクリプト イメージを生成する人もいれば、Web アプリケーション サーバーを実行してグラフを動的に提供する人もいます。
これらすべてのユース ケースをサポートするために、Matplotlib はさまざまな出力をターゲットにすることができ、これらの各機能はバックエンドと呼ばれます。「フロントエンド」はユーザー向けのコード、つまりプロットコードであり、「バックエンド」は図を作成するために舞台裏ですべてのハードワークを行います。バックエンドには 2 つのタイプがあります。ユーザー インターフェイス バックエンド (PyQt/PySide、PyGObject、Tkinter、wxPython、または macOS/Cocoa で使用)。「インタラクティブ バックエンド」とも呼ばれます) および画像ファイルを作成するためのハードコピー バックエンド (PNG、SVG、PDF、PS。「非インタラクティブ バックエンド」とも呼ばれます)。
バックエンドの選択#
バックエンドを構成するには、次の 3 つの方法があります。
ファイル内の
rcParams["backend"]
パラメーターmatplotlibrc
の
MPLBACKEND
環境変数
以下に、より詳細な説明を示します。
複数の構成が存在する場合は、リストの最後の構成が優先されます。たとえば、呼び出しmatplotlib.use()
はあなたの設定を上書きしますmatplotlibrc
。
バックエンドが明示的に設定されていない場合、Matplotlib は、システムで利用可能なものと、GUI イベント ループが既に実行されているかどうかに基づいて、使用可能なバックエンドを自動的に検出します。次のリストの最初の使用可能なバックエンドが選択されます: MacOSX、QtAgg、GTK4Agg、Gtk3Agg、TkAgg、WxAgg、Agg。最後の Agg は、ファイルへの書き込みのみが可能な非対話型バックエンドです。Matplotlib が X ディスプレイにも Wayland ディスプレイにも接続できない場合、Linux で使用されます。
構成方法の詳細な説明は次のとおりです。
ファイル
rcParams["backend"]
の設定:matplotlibrc
backend : qtagg # use pyqt with antigrain (agg) rendering
の設定
MPLBACKEND
環境変数:環境変数は、現在のシェルまたは単一のスクリプトのいずれかに設定できます。
Unix の場合:
> export MPLBACKEND=qtagg > python simple_plot.py > MPLBACKEND=qtagg python simple_plot.py
Windows では、前者のみが可能です。
> set MPLBACKEND=qtagg > python simple_plot.py
この環境変数を設定すると、現在の作業ディレクトリに がある場合でも、任意
backend
の のパラメータが上書きされます。したがって、設定matplotlibrc
matplotlibrc
MPLBACKEND
直感に反する動作につながる可能性があるため、 グローバルに、たとえば、.bashrc
またはで使用することはお勧めできません。.profile
スクリプトが特定のバックエンドに依存している場合は、次の関数を使用できます
matplotlib.use()
。import matplotlib matplotlib.use('qtagg')
これは、図が作成される前に行う必要があります。そうしないと、Matplotlib がバックエンドの切り替えに失敗し、ImportError が発生する可能性があります。
ユーザーが別のバックエンドを使用
use
したい場合は、コードを変更する必要があります。use
したがって、どうしても必要な場合を除き、明示的に呼び出すことは避けてください 。
組み込みのバックエンド#
デフォルトでは、Matplotlib は自動的にデフォルトのバックエンドを選択する必要があります。これにより、インタラクティブな作業とスクリプトからのプロットの両方が可能になり、画面やファイルに出力されるため、少なくとも最初はバックエンドについて心配する必要はありません。最も一般的な例外は、Python ディストリビューションに付属tkinter
していない場合で、他の GUI ツールキットがインストールされていない場合です。python-tk
これは、特定の Linux ディストリビューションで発生し、名前付き(または類似の名前) の Linux パッケージをインストールする必要があります。
ただし、グラフィカル ユーザー インターフェイスや Web アプリケーション サーバー ( Web アプリケーション サーバー (Flask) への埋め込み )を記述したい場合、または何が起こっているのかをよりよく理解する必要がある場合は、読み進めてください。グラフィカル ユーザー インターフェイスをより簡単にカスタマイズできるようにするために、Matplotlib ではレンダラー (実際に描画を行うもの) の概念をキャンバス (描画が行われる場所) から分離しています。ユーザー インターフェイスの正規のレンダラーAgg
は、Anti-Grain Geometry C++ ライブラリを使用して Figure のラスター (ピクセル) イメージを作成するものです。、、、、、、および
バックエンドQtAgg
で使用されGTK4Agg
ます。代替レンダラーは Cairo ライブラリに基づいており、 などで使用されています。GTK3Agg
wxAgg
TkAgg
macosx
QtCairo
レンダリング エンジンについては、ユーザーはベクターレンダラーとラスターレンダラーを区別することもできます。ベクトル グラフィックス言語は、「この点からこの点まで線を引く」などの描画コマンドを発行するため、スケール フリーです。ラスター バックエンドは、精度が DPI 設定に依存するラインのピクセル表現を生成します。
以下は、Matplotlib レンダラーの概要です (それぞれに同名のバックエンドがあります。これらは非対話型のバックエンドであり、ファイルへの書き込みが可能です)。
レンダラー |
ファイルタイプ |
説明 |
---|---|---|
AGG |
png |
ラスターグラフィック -- Anti-Grain Geometryエンジンを使用した高品質の画像 。 |
ベクトルグラフィック -- Portable Document Format出力。 |
||
PS |
ps、eps |
ベクトルグラフィック -- PostScript出力。 |
SVG |
svg |
ベクトルグラフィックス --スケーラブルなベクトル グラフィックスの出力。 |
PGF |
pgf、pdf |
|
カイロ |
png、ps、pdf、svg |
ラスターまたはベクターグラフィックス -- Cairoライブラリを使用 ( pycairoまたはcairocffiが必要)。 |
非対話型バックエンドを使用してプロットを保存するには、
matplotlib.pyplot.savefig('filename')
メソッドを使用します。
これらは、サポートされているユーザー インターフェイスとレンダラーの組み合わせです。これらはインタラクティブなバックエンドであり、画面に表示し、上記の表の適切なレンダラーを使用してファイルに書き込むことができます。
バックエンド |
説明 |
---|---|
QtAgg |
Qtキャンバスでの Agg レンダリング( PyQtまたはQt for Python、別名 PySide が必要)。このバックエンドは、IPython で
. |
ipinmpl |
Jupyter ウィジェットに埋め込まれた Agg レンダリング ( ipymplが必要)。このバックエンドは、Jupyter ノートブックで有効にすることができます
。 |
GTK3Agg |
GTK 3.x キャンバスへの集約レンダリング( PyGObjectおよび
pycairoが必要)。このバックエンドは、IPython で
. |
GTK4Agg |
GTK 4.x キャンバスへの集約レンダリング( PyGObjectおよび
pycairoが必要)。このバックエンドは、IPython で
. |
macosx |
OSX での Cocoa キャンバスへの Agg レンダリング。このバックエンドは、IPython で. |
TkAgg |
Tkキャンバスへの集約レンダリング( TkInterが必要)。このバックエンドは、IPython で. |
nbAgg |
Jupyter クラシック ノートブックにインタラクティブな図を埋め込みます。このバックエンドは、
. |
WebAgg |
On |
GTK3カイロ |
|
GTK4カイロ |
|
wxAgg |
wxWidgetsキャンバスへの集約レンダリング( wxPython 4 が必要)。このバックエンドは、IPython で. |
ノート
組み込みバックエンドの名前は大文字と小文字を区別しません。たとえば、'QtAgg' と 'qtagg' は同等です。
ipympl #
Jupyter ウィジェットのエコシステムは急速に変化しており、Matplotlib で直接サポートすることはできません。ipympl をインストールするには:
pip install ipympl
また
conda install ipympl -c conda-forge
詳細については、ipymplのインストールを参照してください。
Qt 実装を選択するにはどうすればよいですか? #
QtAgg および QtCairo バックエンドは、Qt 5 と 6 の両方、および両方の Python バインディング ( PyQtまたはQt for Python、別名 PySide) をサポートします。バインディングが既にロードされている場合は、Qt バックエンドに使用されます。それ以外の場合は、最初に使用可能なバインディングが、PyQt6、PySide6、PyQt5、PySide2 の順序で使用されます。
のQT_API
環境変数を設定して、何もロードされていない場合に検索をオーバーライドできます。使用するバージョンとバインディングを選択するために、(大文字と小文字を区別せずに) PyQt6、PySide6、PyQt5、または PySide2 に設定できます。選択した実装が利用できない場合、Qt バックエンドは他の Qt 実装を試行せずにロードに失敗します。詳細については、 Qt バインディングを参照してください。
非組み込みバックエンドの使用#
より一般的には、上記の方法のいずれかを使用して、インポート可能なバックエンドを選択できます。name.of.the.backend
がバックエンドを含むモジュールである場合module://name.of.the.backend
、バックエンド名として
使用しmatplotlib.use('module://name.of.the.backend')
ます。