Table of Contents

概要

グラフを描くのはGUI環境ですることがほとんどかと思いますが、場合によってはCUI環境でやることもあると思いますので、それに関する解説です。

CUI環境

matplotlibでグラフを作成するとき、フロントエンドである自分で作ったPythonのプログラムと、バックエンドであるブラックボックス化されたプログラムを組み合わせることになります。 matplotlibではバックエンドとして次の2種類があって

と呼ぶことになっています。

CUI環境で使っているときやSSHでサーバに接続して作業しているときなど、matplotlibがデフォルトで対話型バックエンドを呼び出す設定になっている場合(これが普通です)に対話型バックエンドが起動できずエラーがでます。

対話型バックエンドが使えない環境では、matplotlib.pyplotをインポートする前に

import matplotlib
matplotlib.use("Agg")

を挿入することで非対話型バックエンドのみが使用されます。 plt.showが使えなくなることに注意しましょう。 なお、AGG=Anti-Grain Geometryはベクター形式の情報からラスター画像を生成するのに使われるC++のライブラリ(つまり非対話型バックエンド)です。

sin_agg.py
import matplotlib
matplotlib.use("Agg")
 
import numpy as np
import matplotlib.pyplot as plt
 
x = np.arange(-5, 5, 0.1)
y = np.sin(x)
 
plt.plot(x, y)
 
plt.savefig("sin.png")

デフォルトのバックエンドは matplotlibrc で確認できます。

参考