バックエンド#

バックエンドとは?#

Web サイトやメーリング リストの多くのドキュメントは「バックエンド」に言及しており、多くの新規ユーザーはこの用語に混乱しています。Matplotlib は、さまざまなユース ケースと出力形式を対象としています。Python シェルから対話的に Matplotlib を使用し、コマンドを入力するとプロット ウィンドウがポップアップする人もいます。Jupyterノートブックを実行 し、インライン プロットを描画して迅速なデータ分析を行う人もいます。また、Matplotlib を PyQt や PyGObject などのグラフィカル ユーザー インターフェイスに埋め込んで、リッチなアプリケーションを構築する人もいます。バッチ スクリプトで Matplotlib を使用して数値シミュレーションからポストスクリプト イメージを生成する人もいれば、Web アプリケーション サーバーを実行してグラフを動的に提供する人もいます。

これらすべてのユース ケースをサポートするために、Matplotlib はさまざまな出力をターゲットにすることができ、これらの各機能はバックエンドと呼ばれます。「フロントエンド」はユーザー向けのコード、つまりプロットコードであり、「バックエンド」は図を作成するために舞台裏ですべてのハードワークを行います。バックエンドには 2 つのタイプがあります。ユーザー インターフェイス バックエンド (PyQt/PySide、PyGObject、Tkinter、wxPython、または macOS/Cocoa で使用)。「インタラクティブ バックエンド」とも呼ばれます) および画像ファイルを作成するためのハードコピー バックエンド (PNG、SVG、PDF、PS。「非インタラクティブ バックエンド」とも呼ばれます)。

バックエンドの選択#

バックエンドを構成するには、次の 3 つの方法があります。

以下に、より詳細な説明を示します。

複数の構成が存在する場合は、リストの最後の構成が優先されます。たとえば、呼び出しmatplotlib.use()はあなたの設定を上書きしますmatplotlibrc

バックエンドが明示的に設定されていない場合、Matplotlib は、システムで利用可能なものと、GUI イベント ループが既に実行されているかどうかに基づいて、使用可能なバックエンドを自動的に検出します。次のリストの最初の使用可能なバックエンドが選択されます: MacOSX、QtAgg、GTK4Agg、Gtk3Agg、TkAgg、WxAgg、Agg。最後の Agg は、ファイルへの書き込みのみが可能な非対話型バックエンドです。Matplotlib が X ディスプレイにも Wayland ディスプレイにも接続できない場合、Linux で使用されます。

構成方法の詳細な説明は次のとおりです。

  1. ファイルrcParams["backend"]の設定:matplotlibrc

    backend : qtagg   # use pyqt with antigrain (agg) rendering
    

    スタイル シートと rcParams を使用した Matplotlib のカスタマイズも参照してください。

  2. の設定MPLBACKEND環境変数:

    環境変数は、現在のシェルまたは単一のスクリプトのいずれかに設定できます。

    Unix の場合:

    > export MPLBACKEND=qtagg
    > python simple_plot.py
    
    > MPLBACKEND=qtagg python simple_plot.py
    

    Windows では、前者のみが可能です。

    > set MPLBACKEND=qtagg
    > python simple_plot.py
    

    この環境変数を設定すると、現在の作業ディレクトリに がある場合でも、任意backendの のパラメータが上書きされます。したがって、設定 matplotlibrcmatplotlibrcMPLBACKEND直感に反する動作につながる可能性があるため、 グローバルに、たとえば、.bashrcまたはで使用することはお勧めできません。.profile

  3. スクリプトが特定のバックエンドに依存している場合は、次の関数を使用できます 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 ライブラリに基づいており、 などで使用されています。GTK3AggwxAggTkAggmacosxQtCairo

レンダリング エンジンについては、ユーザーはベクターレンダラーとラスターレンダラーを区別することもできます。ベクトル グラフィックス言語は、「この点からこの点まで線を引く」などの描画コマンドを発行するため、スケール フリーです。ラスター バックエンドは、精度が DPI 設定に依存するラインのピクセル表現を生成します。

以下は、Matplotlib レンダラーの概要です (それぞれに同名のバックエンドがあります。これらは非対話型のバックエンドであり、ファイルへの書き込みが可能です)。

レンダラー

ファイルタイプ

説明

AGG

png

ラスターグラフィック -- Anti-Grain Geometryエンジンを使用した高品質の画像 。

PDF

pdf

ベクトルグラフィック -- Portable Document Format出力。

PS

ps、eps

ベクトルグラフィック -- PostScript出力。

SVG

svg

ベクトルグラフィックス --スケーラブルなベクトル グラフィックスの出力。

PGF

pgf、pdf

ベクトルグラフィックス -- pgfパッケージを使用。

カイロ

png、ps、pdf、svg

ラスターまたはベクターグラフィックス -- Cairoライブラリを使用 ( pycairoまたはcairocffiが必要)。

非対話型バックエンドを使用してプロットを保存するには、 matplotlib.pyplot.savefig('filename')メソッドを使用します。

これらは、サポートされているユーザー インターフェイスとレンダラーの組み合わせです。これらはインタラクティブなバックエンドであり、画面に表示し、上記の表の適切なレンダラーを使用してファイルに書き込むことができます。

バックエンド

説明

QtAgg

Qtキャンバスでの Agg レンダリング( PyQtまたはQt for Python、別名 PySide が必要)。このバックエンドは、IPython で .%matplotlib qt

ipinmpl

Jupyter ウィジェットに埋め込まれた Agg レンダリング ( ipymplが必要)。このバックエンドは、Jupyter ノートブックで有効にすることができます 。%matplotlib ipympl

GTK3Agg

GTK 3.x キャンバスへの集約レンダリング( PyGObjectおよび pycairoが必要)。このバックエンドは、IPython で .%matplotlib gtk3

GTK4Agg

GTK 4.x キャンバスへの集約レンダリング( PyGObjectおよび pycairoが必要)。このバックエンドは、IPython で .%matplotlib gtk4

macosx

OSX での Cocoa キャンバスへの Agg レンダリング。このバックエンドは、IPython で.%matplotlib osx

TkAgg

Tkキャンバスへの集約レンダリング( TkInterが必要)。このバックエンドは、IPython で.%matplotlib tk

nbAgg

Jupyter クラシック ノートブックにインタラクティブな図を埋め込みます。このバックエンドは、 .%matplotlib notebook

WebAgg

Onshow()は、インタラクティブなフィギュアでトルネード サーバーを起動します。

GTK3カイロ

GTK 3.x キャンバスへの Cairo レンダリング( PyGObjectおよび pycairoが必要)。

GTK4カイロ

GTK 4.x キャンバスへの Cairo レンダリング( PyGObjectおよび pycairoが必要)。

wxAgg

wxWidgetsキャンバスへの集約レンダリング( wxPython 4 が必要)。このバックエンドは、IPython で.%matplotlib wx

ノート

組み込みバックエンドの名前は大文字と小文字を区別しません。たとえば、'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')ます。