====== 概要 ======
グラフを描くのはGUI環境ですることがほとんどかと思いますが、場合によってはCUI環境でやることもあると思いますので、それに関する解説です。
====== CUI環境 ======
matplotlibでグラフを作成するとき、フロントエンドである自分で作ったPythonのプログラムと、バックエンドであるブラックボックス化されたプログラムを組み合わせることになります。
matplotlibではバックエンドとして次の2種類があって
* 画面にウィンドウを開いて図形や文字を表示したり編集したりするプログラムを対話型バックエンド(interactive backend)
* 与えられた情報を元にPNGやEPSといった画像ファイルを生成するプログラムを非対話型バックエンド(non-interactive backend)
と呼ぶことになっています。
CUI環境で使っているときやSSHでサーバに接続して作業しているときなど、matplotlibがデフォルトで対話型バックエンドを呼び出す設定になっている場合(これが普通です)に対話型バックエンドが起動できずエラーがでます。
対話型バックエンドが使えない環境では、matplotlib.pyplotをインポートする前に
import matplotlib
matplotlib.use("Agg")
を挿入することで非対話型バックエンドのみが使用されます。
plt.showが使えなくなることに注意しましょう。
なお、AGG=Anti-Grain Geometryはベクター形式の情報からラスター画像を生成するのに使われるC++のライブラリ(つまり非対話型バックエンド)です。
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 で確認できます。
* Anaconda3でインストールした場合は /path/to/anaconda3/lib/python3.6/site-package/matplotlib/mpl-data/ にあります。バックエンドとして qt5agg がデフォルトになっている(Qt5+AGGの意。Qt5はGUI用のフレームワーク)ので、CUI環境だとAggに変更しといた方が便利です。
===== 参考 =====
* https://matplotlib.org/faq/usage_faq.html#what-is-a-backend