Matplotlib における図サイズの完全攻略ガイド
Updated on
Matplotlib で 図(figure)のサイズをコントロールすることは、見やすく読みやすい、そして論文・レポートにそのまま使えるクオリティの可視化を作るうえで非常に重要です。
ちょっとした探索的プロットから、本番用のきれいな図まで、サイズ指定を正しく理解しておくと、縦横比の崩れたグラフや読めないラベル、不揃いなレイアウトといった問題を避けられます。
このガイドでは、Matplotlib の図サイズをコントロールする 実用的な全手法 を扱います:
- 新しい figure を作るときに
figsizeを使う - 既存の figure のサイズを変更する
rcParamsでグローバルなデフォルトサイズを設定する- センチメートル単位で図サイズを指定する
- Pandas プロットでサイズを変える
- グローバルサイズをリセット・動的に変更する
- よくあるトラブルと対処法
- すべての方法をまとめた比較表
⭐ TL;DR — 早見表
| やりたいこと | ベストな方法 | 例 |
|---|---|---|
| 新しい figure のサイズを決める | plt.figure(figsize=(w, h)) | plt.figure(figsize=(8, 6)) |
| 既存の figure のサイズを変える | fig.set_size_inches(w, h) | fig.set_size_inches(12, 4) |
| 全体のデフォルトサイズを変える | plt.rcParams["figure.figsize"] = ... | (12, 6) |
| Pandas プロットのサイズを変える | df.plot(figsize=(w, h)) | (10, 5) |
| センチメートルで指定したい | cm → inch に変換 | w_cm / 2.54 |
Matplotlib における図サイズの基本
Matplotlib では図のサイズは インチ(inch) 単位で指定し、(width, height) のタプルを使います。
最も直接的に、固定サイズの figure を作る方法は次のとおりです:
from matplotlib.pyplot import figure
# 新しい figure を作成(幅 8 inch、高さ 6 inch)
figure(figsize=(8, 6))こうしておけば、データセットやプロットの種類に関係なく、指定したサイズで図が作られます。
既に作られた図のサイズを調整する
plt.plot() や Pandas のプロットなどで figure が自動的に生成される場合でも、その後からサイズを変えられます:
import matplotlib.pyplot as plt
# 現在の figure を取得
fig = plt.gcf()
# サイズを 18.5 x 10.5 inch に変更
fig.set_size_inches(18.5, 10.5)
# サイズ変更後の図を保存
fig.savefig("figure.png", dpi=100)set_size_inches() は、すでに存在している figure をリサイズする最も確実な方法です。
rcParams でグローバルなデフォルト図サイズを設定する
すべてのプロットで同じサイズを使いたい場合(notebook やスクリプトで便利)、グローバルなデフォルトを設定できます:
import matplotlib.pyplot as plt
# 以降に作るすべての figure を 20 x 3 inch にする
plt.rcParams["figure.figsize"] = (20, 3)これは その後に作られるすべての図 に適用され、上書きされるまで維持されます。
センチメートル単位で図サイズを指定する
論文や学会などでメートル法が指定されている場合は、センチメートルをインチに変換して使います:
width_cm = 20
height_cm = 10
# cm を inch に変換
width_in = width_cm / 2.54
height_in = height_cm / 2.54
# 変換したサイズを使用
figure(figsize=(width_in, height_in))仕組み自体は、インチで直接指定する場合と同じです。
グローバルデフォルトをリセット / 動的に変更する
Matplotlib の元の設定に戻したい場合は次のようにします:
plt.rcParams["figure.figsize"] = plt.rcParamsDefault["figure.figsize"]これは、1 つの notebook の中で「小さな素早いプロット」と「大きめの出版向けプロット」を混在させたいときに便利です。
Pandas で図サイズをコントロールする
Pandas は Matplotlib と直接連携しており、figsize もそのまま使えます:
df['some_column'].plot(figsize=(10, 5))サブプロットを使う場合:
fig, ax = plt.subplots(figsize=(10, 5))
df['some_column'].plot(ax=ax)データ分析用の notebook では、この方法が特に手軽です。
すべてのプロットに対して Matplotlib のデフォルト図サイズを変える
すべてのプロットが自動的に同じサイズになるようにしたいときは次のようにします:
import matplotlib
matplotlib.rc("figure", figsize=(10, 5))これは rcParams を直接変更するのとほぼ同じで、スクリプト・notebook の両方で機能します。
🔍 すべての方法の比較表
| 方法 | 使うタイミング | 特徴 |
|---|---|---|
figure(figsize=...) | 新しい figure を作成するとき | 最も推奨される基本的な方法 |
set_size_inches() | 既存の figure をリサイズしたいとき | 自動生成された図に便利 |
plt.rcParams["figure.figsize"] | notebook 内でグローバルデフォルトを変えたい | EDA(探索的データ分析)でよく使う |
matplotlib.rc("figure", figsize=...) | スクリプト全体のデフォルトを変えたいとき | 本番や再利用可能コードに向いている |
| センチメートル変換 | 学術論文・出版社指定のサイズに合わせるとき | LaTeX 論文などで有用 |
df.plot(figsize=...) | Pandas ベースのワークフローのとき | 手早い EDA に便利 |
⚠️ トラブルシューティング: figsize が効かないとき(よくある問題)
1. Jupyter Notebook で figsize が無視される
対処:
%matplotlib inline2. tight_layout でラベルが切れてしまう
次を使用:
plt.tight_layout()3. 保存したときに図のサイズが変わる
常に DPI を明示的に指定します:
plt.savefig("output.png", dpi=150)4. フォントやラベルのスケールが意図せず変わる
自動レイアウトをオフにします:
plt.rcParams['figure.autolayout'] = False5. サブプロット同士が重なってしまう
図自体を大きくします:
fig, ax = plt.subplots(figsize=(12, 8))このようなトラブルシューティングは、Matplotlib 関連の検索で非常にニーズが高く、ユーザーのフラストレーションを解消してくれます。
Matplotlib の代替: PyGWalker でデータを可視化する
Matplotlib 以外の選択肢として、pandas の DataFrame を PyGWalker でインタラクティブに探索する方法もあります。PyGWalker はオープンソースのドラッグ&ドロップ型データ可視化ツールです:
Jupyter 内で利用する場合:
pip install pygwalker
import pygwalker as pyg
gwalker = pyg.walk(df)オンラインで試すこともできます:
よくある質問(FAQ)
-
Matplotlib で図のサイズを設定するにはどうすればいいですか?
figure(figsize=(width, height))を使います。 -
既存の figure のサイズを変更するにはどうすればいいですか?
fig.set_size_inches(w, h)を使います。 -
Pandas の plot でも図サイズを変更できますか?
はい、figsize=(w, h)引数で指定できます。
