MatplotlibのAggとCairoバックエンドの違いを徹底解説
Matplotlibには複数の描画バックエンドが用意されており、用途に応じて使い分けることで、より高品質なグラフを出力できます。本記事では、代表的な2つのバックエンド「Agg」と「Cairo」の違いを比較し、実際のコード例とともにその使い方を解説します。
AggとCairoの比較一覧
| レンダラー | 対応ファイル形式 | 説明 |
|---|---|---|
| AGG | png | ラスター形式のグラフィックス。Anti-Grain Geometryエンジンによるアンチエイリアス処理により、高品質な画像を出力できます。 |
| Cairo | png、ps、pdf、svg | ラスター・ベクター両方のグラフィックスに対応。Cairoライブラリを使用して描画します。 |
ポイントとして、AggはPNG形式のみの出力に特化している一方、CairoはPDFやSVGなどベクター形式にも対応しています。拡大しても画質が劣化しないベクター画像が必要な場合は、Cairoバックエンドを選択するとよいでしょう。
実装手順
- 図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。
- バックエンド名を「Agg」に設定します。
- NumPyを使って5×5の行列データを作成します。
- imshow()メソッドを使い、データを2次元のラスタ画像として表示します。
- savefig()メソッドで図をファイルに保存します。
コード例
import matplotlib as mpl
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
mpl.use("Agg")
data = np.random.rand(5, 5)
plt.imshow(data, interpolation='nearest', cmap="copper")
plt.savefig('agg.png')
このコードでは、まず mpl.use("Agg") によってバックエンドをAggに切り替えています。その後、ランダムな値を持つ5×5の行列を生成し、imshow()でカラーマップ「copper」を指定してヒートマップのように可視化しています。
出力結果

Cairoバックエンドを使用する場合は、mpl.use("Cairo") と記述するだけで同様の手順でPDFやSVG形式での保存が可能になります。画面へのインタラクティブな表示が必要ない場合や、サーバー環境で画像ファイルを生成したい場合には、Aggのような非対話型(ヘッドレス)バックエンドが特に有効です。
-
Matplotlibの図に凡例を配置・整列させる方法
Matplotlibで作成した図(フィギュア)に凡例を適切な位置に配置し、要素を整列させる方法を解説します。凡例の位置調整には bbox_to_anchor 引数を使用するのがポイントです。 手順 plot() メソッドを使って line1 と line2 の2本の線をプロットします。 legend() メソッドで図に凡例を配置します。このとき bbox_to_anchor を使って凡例の位置を指定し、ncol 引数で凡例要素を横並びに整列させます。 show() メソッドを呼び出して図を表示します。 コード例 from matplotlib import pyplot as plt pl
-
Matplotlibで凡例のマーカーとラベルの間隔を調整する方法
Matplotlibで凡例(legend)のマーカーとラベルの間隔を調整したい場合は、legend()メソッドのlabelspacing引数を使用します。この引数に数値を指定することで、凡例内の各行(マーカーとラベル)同士の縦方向のスペースを自由に広げたり狭めたりできます。手順Label 1、Label 2、Label 3というラベルを付けて、3本の線をプロットします。凡例のマーカーとラベルの間隔を調整するための変数spaceを定義します。legend()メソッドの引数にlabelspacing=spaceを指定して呼び出します。図を表示するには、plt.show()メソッドを使用します。サン