Skip to content

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 inline

2. tight_layout でラベルが切れてしまう

次を使用:

plt.tight_layout()

3. 保存したときに図のサイズが変わる

常に DPI を明示的に指定します:

plt.savefig("output.png", dpi=150)

4. フォントやラベルのスケールが意図せず変わる

自動レイアウトをオフにします:

plt.rcParams['figure.autolayout'] = False

5. サブプロット同士が重なってしまう

図自体を大きくします:

fig, ax = plt.subplots(figsize=(12, 8))

このようなトラブルシューティングは、Matplotlib 関連の検索で非常にニーズが高く、ユーザーのフラストレーションを解消してくれます。


Matplotlib の代替: PyGWalker でデータを可視化する

Matplotlib 以外の選択肢として、pandas の DataFrame を PyGWalker でインタラクティブに探索する方法もあります。PyGWalker はオープンソースのドラッグ&ドロップ型データ可視化ツールです:

PyGWalker for Data visualization (opens in a new tab)

Jupyter 内で利用する場合:

pip install pygwalker
import pygwalker as pyg
 
gwalker = pyg.walk(df)

オンラインで試すこともできます:

Kaggle NotebookGoogle ColabGitHub ⭐
https://www.kaggle.com/asmdef/pygwalker-test (opens in a new tab)https://colab.research.google.com/drive/171QUQeq-uTLgSj1u-P9DQig7Md1kpXQ2 (opens in a new tab)https://github.com/Kanaries/pygwalker (opens in a new tab)

よくある質問(FAQ)

  1. Matplotlib で図のサイズを設定するにはどうすればいいですか?
    figure(figsize=(width, height)) を使います。

  2. 既存の figure のサイズを変更するにはどうすればいいですか?
    fig.set_size_inches(w, h) を使います。

  3. Pandas の plot でも図サイズを変更できますか?
    はい、figsize=(w, h) 引数で指定できます。