User Tools

Site Tools


Sidebar

python:matplotlib:プロットの保存

This is an old revision of the document!


概要

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 がデフォルトになっている(Qt5+AGGの意。Qt5はGUI用のフレームワーク)ので、CUI環境だとAggに変更しといた方が便利です。

参考

python/matplotlib/プロットの保存.1516481971.txt.gz · Last modified: 2021/06/27 21:59 (external edit)