概要(図保存は「伝える場面に合わせた形式と解像度」を選ぶのが核心)
Matplotlibの図保存は、plt.savefig または fig.savefig を使って画像ファイルへ出力します。重要なのは「形式(PNG/PDF/SVG)」「解像度(dpi)」「余白(bbox_inches/pad_inches)」「背景の透明・色」「レイアウト調整(tight_layout/constrained_layout)」の5点です。まずは基本の保存を押さえ、用途に合わせて設定を切り替える型を身につけましょう。
基本の保存(ここが最短ルート)
pyplotスタイルでの保存
import matplotlib.pyplot as plt
x = [1,2,3,4]; y = [100,120,90,130]
plt.plot(x, y, marker="o")
plt.title("月別売上"); plt.xlabel("月"); plt.ylabel("売上(万円)")
plt.tight_layout() # 余白を自動調整
plt.savefig("sales.png") # PNGで保存
plt.show()
Python最短は plt.savefig(“名前.拡張子”)。tight_layout を先に呼ぶと、タイトルやラベルが切れにくくなります。
オブジェクト指向スタイルでの保存
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(6,4))
ax.plot([1,2,3,4],[100,120,90,130], marker="o")
ax.set_title("月別売上"); ax.set_xlabel("月"); ax.set_ylabel("売上(万円)")
fig.tight_layout()
fig.savefig("sales.png") # figから直接保存
plt.show()
Python複数サブプロットや高度な調整では fig.savefig が確実です。
解像度・余白・サイズ(見た目の品質を決める設定)
解像度(dpi)と余白(bbox_inches/pad_inches)
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot([1,2,3,4],[100,120,90,130]); ax.set_title("月別売上")
fig.tight_layout()
fig.savefig("sales_300dpi.png", dpi=300, bbox_inches="tight", pad_inches=0.2)
Pythondpi は印刷・配布品質を左右します。一般向けは 150〜200、印刷・資料なら 300 以上が目安。bbox_inches=”tight” は余白を詰め、pad_inches で必要分だけ追加します。
図サイズ(figsize)でそもそもの見やすさを整える
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(8,5))
ax.plot([1,2,3,4],[100,120,90,130]); ax.set_title("大きめの図")
fig.savefig("large.png", dpi=150)
Python小さい図を高dpiで無理に出すより、適切な figsize × 適度な dpi の方が文字の見切れや潰れを防げます。
形式の選び方(PNG・PDF・SVGの使い分け)
用途別の推奨形式
- PNG: もっとも汎用。資料・Web・画像貼り付けに向く。透過背景も使いやすい。
- PDF: ベクター形式で印刷・配布に強い。文字や線が拡大に強く、レイアウト崩れが少ない。
- SVG: WebやIllustratorなどでの後編集に最適。ロゴ・アイコン・線画中心の図で威力を発揮。
形式の切り替えは拡張子だけでOK
fig.savefig("report.pdf") # ベクター(PDF)
fig.savefig("chart.svg") # ベクター(SVG)
fig.savefig("image.png") # ラスター(PNG)
Python同じ図を用途ごとに複数形式で保存すると後工程が楽になります。
背景・色・透明度・フォント(配布先に合わせた整え方)
透明背景や背景色の指定
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot([1,2,3,4],[100,120,90,130]); ax.set_title("透明背景")
fig.tight_layout()
fig.savefig("transparent.png", transparent=True) # 背景透過
fig.savefig("white_bg.png", facecolor="white") # 背景色指定
Python資料テンプレートやWeb背景に合わせて、transparent や facecolor を使い分けます。
日本語フォントの設定(文字化け対策)
import matplotlib.pyplot as plt
plt.rcParams["font.family"] = "DejaVu Sans" # 実環境の日本語フォントに合わせて変更
fig, ax = plt.subplots()
ax.set_title("日本語タイトル"); ax.set_xlabel("月"); ax.set_ylabel("売上(万円)")
fig.savefig("jp.png", dpi=200)
Python保存前にフォント設定を済ませておくと、画像でも文字化けを避けられます。
実務の型(ディレクトリ作成・ファイル名・大量生成の安定運用)
保存先ディレクトリを先に作る
from pathlib import Path
import matplotlib.pyplot as plt
out = Path("reports") / "sales.png"
out.parent.mkdir(parents=True, exist_ok=True)
fig, ax = plt.subplots()
ax.plot([1,2,3,4],[100,120,90,130])
fig.tight_layout(); fig.savefig(out, dpi=200)
Python存在しないフォルダで失敗しないよう、Pathlibで親フォルダを作ってから保存します。
日付やパラメータをファイル名へ差し込む(上書き防止)
import datetime, matplotlib.pyplot as plt
ts = datetime.datetime.now().strftime("%Y%m%d_%H%M")
fname = f"sales_{ts}.png"
fig, ax = plt.subplots()
ax.plot([1,2,3,4],[100,120,90,130])
fig.tight_layout(); fig.savefig(fname, dpi=200)
Pythonタイムスタンプを付けると、バージョン管理や比較がスムーズになります。
大量生成時のメモリ・表示管理(closeの徹底)
import matplotlib.pyplot as plt
for i in range(5):
fig, ax = plt.subplots()
ax.plot([1,2,3,4],[i, i+1, i+2, i+3])
fig.savefig(f"plot_{i}.png", dpi=150)
plt.close(fig) # クローズしてメモリを解放
Python大量の図を順次保存するスクリプトでは、plt.close を必ず呼んでメモリを守ります。
よくある落とし穴の回避(切れ・ぼやけ・色転び)
タイトルやラベルが切れる
- 保存前に fig.tight_layout()、または bbox_inches=”tight”+pad_inches で余白を確保。
- 文字が大きすぎる場合は fontsize を下げるか figsize を広げる。
ぼやけ・にじみ
- ラスター(PNG/JPG)は dpi を上げる。ベクター(PDF/SVG)を選べるならそちらを使う。
- 小さい図で高dpiを無理に掛けるより、図自体を適切なサイズに。
背景が合わない・色が転ぶ
- 透明背景(transparent=True)か、facecolor で背景色を明示。
- 企業カラーやテーマに合わせて色コード(#RRGGBB)で指定し、印刷で沈む色は避ける。
例題で身につける(定番から一歩先まで)
例題1:高解像度PNG+余白調整
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(7,4))
ax.plot([1,2,3,4],[100,120,90,130], marker="o")
ax.set_title("月別売上"); ax.set_xlabel("月"); ax.set_ylabel("売上(万円)")
fig.tight_layout()
fig.savefig("sales_hd.png", dpi=300, bbox_inches="tight", pad_inches=0.2)
Python例題2:PDFとPNGを同時保存(印刷+配布)
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.bar(["A","B","C","D"], [10,12,9,15])
ax.set_title("製品別数量")
fig.tight_layout()
fig.savefig("products.pdf") # 印刷向け(ベクター)
fig.savefig("products.png", dpi=200) # 配布向け(ラスタ)
Python例題3:透明背景で資料へ自然に合成
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.scatter([1,2,3,4],[2,3,2,5], color="tab:blue")
ax.set_title("散布図")
fig.tight_layout()
fig.savefig("scatter_transparent.png", transparent=True, dpi=200)
Python例題4:Pathlibで安全にフォルダ作成→保存
from pathlib import Path
import matplotlib.pyplot as plt
outdir = Path("exports") / "2025Q4"
outdir.mkdir(parents=True, exist_ok=True)
fig, ax = plt.subplots()
ax.plot([1,2,3,4],[30,25,35,20], marker="o")
fig.tight_layout(); fig.savefig(outdir / "profit.png", dpi=200)
Pythonまとめ
図保存は「形式・解像度・余白・背景・レイアウト」をセットで整えるのが要点です。最短は savefig、品質は dpi と bbox_inches、配布先に合わせた形式選択(PNG/PDF/SVG)が効きます。tight_layout で文字の切れを防ぎ、必要なら透明背景や背景色を指定。Pathlibで保存先を用意し、タイムスタンプで上書き防止、連続保存では close でメモリを守る。これらの型を身につければ、初心者でも「見やすく、配布しやすい」図を安定して作れます。
