グラフを表示するだけでなく、レポートや論文に使うために画像として保存したい場面もありますよね。今回はグラフを画像ファイルとして保存する方法を見ていきましょう。
前回の記事はこちら(リンク)
目次
グラフを保存するには
グラフを保存するにはfig.savefig()を使います。
fig.savefig("ファイル名.png")
plt.show()の前に書くのがポイントです。plt.show()を呼んだ後はFigureの中身がリセットされてしまうため、後に書くと空のファイルが保存されてしまいます。
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots()
x = np.linspace(0, 10, 100)
ax.plot(x, np.sin(x))
ax.set_title("sin(x)")
fig.savefig("sin_graph.png") # ← plt.show()の前に書く
plt.show()
実行すると、Pythonファイルと同じフォルダにsin_graph.pngが保存されます。
保存できるファイル形式
拡張子を変えるだけで異なる形式で保存できます。
| 形式 | 拡張子 | 使いどころ |
|---|---|---|
| PNG | .png |
汎用的。透過背景にも対応 |
.pdf |
論文・レポートに。拡大しても劣化しない | |
| SVG | .svg |
Web用。拡大しても劣化しない |
| JPEG | .jpg |
ファイルサイズを小さくしたいとき |
論文やレポートに使う場合はPDFかSVGがおすすめです。画像を拡大しても劣化しないため、印刷にも適しています。
fig.savefig("sin_graph.pdf") # PDF形式で保存
fig.savefig("sin_graph.svg") # SVG形式で保存
よく使うオプション
解像度を指定する(dpi)
dpi(dots per inch)で解像度を指定できます。数値が大きいほど高解像度になりますが、ファイルサイズも大きくなります。
fig.savefig("sin_graph.png", dpi=300)
| dpi | 用途 |
|---|---|
| 72 | Web表示(デフォルト) |
| 150 | 通常の印刷 |
| 300 | 高品質な印刷・論文 |
余白を調整する(bbox_inches)
デフォルトの設定では、軸ラベルやタイトルが切れてしまう場合があります。bbox_inches="tight"を指定するとグラフ全体がぴったり収まるように余白を自動調整してくれます。
fig.savefig("sin_graph.png", bbox_inches="tight")
基本的には毎回つけておくのがおすすめです。
背景を透明にする(transparent)
transparent=Trueを指定すると背景が透明になります。Webサイトやプレゼンのスライドにグラフをのせるときに便利です。
fig.savefig("sin_graph.png", transparent=True)
※ 透過に対応しているのはPNGとSVGのみです。JPEGは透過に対応していないので注意してください。
完成形:全部まとめて書く
import matplotlib.pyplot as plt
import numpy as np
# ① FigureとAxesを作る
fig, ax = plt.subplots()
# ② データ作成
x = np.linspace(0, 10, 100)
y = np.sin(x)
# ③ プロット・装飾
ax.plot(x, y, color="blue")
ax.set_title("sin(x)")
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.grid(True, linestyle="--", linewidth=0.5)
# ④ 保存(plt.show()の前に書く)
fig.savefig("sin_graph.png", dpi=300, bbox_inches="tight")
# ⑤ 表示
plt.show()
今回使ったオプションを整理するとこうなります:
| オプション | 役割 | おすすめの値 |
|---|---|---|
dpi |
解像度を指定する |
300(高品質) |
bbox_inches |
余白を自動調整する | "tight" |
transparent |
背景を透明にする | True |
まとめ
- グラフの保存は
fig.savefig()を使う -
plt.show()の前に書くのを忘れずに - 拡張子を変えるだけでPNG・PDF・SVGなど形式を選べる
-
dpi=300とbbox_inches="tight"はセットで使うのがおすすめ