データ分析やレポート作成の中で「複数のグラフを1つの画面に並べて比較したい」と感じたことはありませんか?
そんなときに便利なのが、subplot(サブプロット)機能です。
この記事では、Pythonの可視化ライブラリ matplotlib を使って、複数のグラフを効率よく並べて表示する方法をわかりやすく解説します。
🔰 subplotの基本的な使い方
📌 plt.subplot(nrows, ncols, index)
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y1 = [1, 4, 9, 16, 25]
y2 = [25, 16, 9, 4, 1]
plt.figure(figsize=(10, 4)) # 図全体のサイズ
# 1つ目のグラフ(1行2列の左)
plt.subplot(1, 2, 1)
plt.plot(x, y1)
plt.title("上昇カーブ")
# 2つ目のグラフ(1行2列の右)
plt.subplot(1, 2, 2)
plt.plot(x, y2)
plt.title("下降カーブ")
plt.tight_layout()
plt.show()🔍 解説
subplot(1, 2, 1)→ 1行2列の1番目(左)subplot(1, 2, 2)→ 1行2列の2番目(右)
plt.tight_layout() を追加すると、グラフ同士の間隔が自動調整されてきれいに表示されます。
🎨 グラフを縦に並べる
plt.figure(figsize=(6, 6))
plt.subplot(2, 1, 1) # 上段
plt.plot(x, y1)
plt.title("上段グラフ")
plt.subplot(2, 1, 2) # 下段
plt.plot(x, y2)
plt.title("下段グラフ")
plt.tight_layout()
plt.show()💡 ポイント
subplot(2, 1, x)のように行数と列数を設定することで、縦に2つのグラフが並びます。
🧩 plt.subplots() を使う方法(おすすめ)
より柔軟な方法として plt.subplots() も使えます。こちらは「グラフオブジェクトを変数に格納して操作できる」点がメリットです。
fig, axes = plt.subplots(1, 2, figsize=(10, 4))
axes[0].plot(x, y1)
axes[0].set_title("上昇")
axes[1].plot(x, y2)
axes[1].set_title("下降")
plt.tight_layout()
plt.show()axesはグラフを入れる箱のリスト- グラフごとに
axes[i].plot()のように個別に操作できます
🧠 応用:2行2列の複数グラフを一括作成
fig, axes = plt.subplots(2, 2, figsize=(8, 6))
for i in range(2):
for j in range(2):
axes[i][j].plot(x, [v * (i + j + 1) for v in x])
axes[i][j].set_title(f"{i+1}行{j+1}列")
plt.tight_layout()
plt.show()これは「2×2」で合計4つのグラフをまとめて描画する例です。
データの比較やモデルごとの変化を見たいときに便利です。
💬 subplotを使うメリットまとめ
| 利点 | 内容 |
|---|---|
| 一画面にまとめて表示 | 複数の結果を視覚的に比較できる |
| レポートや論文向け | レイアウトを揃えると見栄えが良くなる |
plt.subplots() が便利 | 柔軟にグラフを管理・カスタマイズできる |
✅ 今回のまとめ
| 学んだこと | 内容 |
|---|---|
plt.subplot() | シンプルな複数グラフの並列表示 |
plt.subplots() | 柔軟で推奨される書き方 |
tight_layout() | グラフ同士の間隔を自動調整 |
| 応用 | 2×2や縦並びも自在にレイアウト可能 |
📝 練習問題(理解度チェック)
- 1行2列のグラフを作成し、左に
y = x^2、右にy = √xのグラフを描いてみましょう。
import numpy as np
x = np.linspace(0, 10, 100)plt.subplots(2, 1)を使って縦に2つの折れ線グラフを並べ、1つ目は赤、2つ目は青で描いてください。
次回は「ヒストグラムと箱ひげ図の使い方」について解説します。
分布や外れ値を視覚化したい方は必見です!
【Pythonグラフ入門】ヒストグラムと箱ひげ図でデータの分布を可視化しよう
前回の内容

コメント