This is an old revision of the document!
Table of Contents
概要
plt.show()で表示したプロットは、ウィンドウの上にあるフロッピーのアイコンから保存できますが、スクリプトから直接保存することもできます。
plt.savefig
plt.savefigを使うとファイルに直接出力できます。
- sin_savefig.py
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") # プロットしたグラフをファイルsin.pngに保存する plt.show()
保存できる形式
以下のファイルに出力することが出来ます。
- emf
- eps
- jpeg
- jpg
- pdf
- png
- ps
- raw
- rgba
- svg
- svgz
- tif
- tiff
ファイルの種類は拡張子により自動判別されますが、formatにより明示することも可能です。 またラスター形式の画像の場合、dpiにより解像度を指定することも可能です。
例えばpng形式で解像度をDPI=300としたい場合
plt.savefig("sin.png", format="png", dpi=300)
とします。
CUI環境
matplotlibでグラフを作成するとき、フロントエンドである自分で作ったPythonのプログラムと、バックエンドであるブラックボックス化されたプログラムを組み合わせることになります。 matplotlibではバックエンドとして次の2種類があって、それぞれを画面にウィンドウを開いて図形や文字を表示したり編集したりする対話型バックエンド(interactive backend)、与えられた情報を元にPNGやEPSといった画像ファイルを生成する非対話型バックエンド(non-interactive backend)と呼びます。
デフォルトで対話型バックエンドを呼び出す設定になっている場合(これが普通です)、CUI環境で使っているときやSSHでサーバに接続して作業しているときなどに対話型バックエンドが起動できずエラーがでます。
対話型バックエンドが使えない環境では、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 で確認できます。
- Anaconda3でインストールした場合は /path/to/anaconda3/lib/python3.6/site-package/matplotlib/mpl-data/ にあります。バックエンドとして qt5agg がデフォルトになっているので、CUI環境だとAggに変更しといた方が便利です。