0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

複数のAxesを1つのFigureに並べよう〜初心者向けMatplotlib講座 #8〜

0
Posted at

前回はグリッド線と軸の範囲を設定する方法を学びました。今回は1つのFigureに複数のAxesを並べる方法を見ていきましょう。

前回の記事はこちら(リンク)

目次

  1. 複数のAxesを並べるには
  2. plt.subplots()を使う
  3. 各Axesにグラフを描く
  4. 完成形:全部まとめて書く

複数のAxesを並べるには

第3弾でadd_axes()を複数回呼ぶことで複数のAxesを置けると紹介しました。しかしあの方法は位置を手動で指定する必要があるため、均等に並べるのが大変です。

均等に複数のAxesを並べたいときはplt.subplots()を使うのが一般的です。

plt.subplots()を使う

plt.subplots()FigureとAxesをまとめて作ってくれる便利な関数です。

fig, axes = plt.subplots(行数, 列数)

たとえば1行2列(横に2つ並べる)の場合はこうなります。

fig, axes = plt.subplots(1, 2)
Figure
┌─────────────┬─────────────┐
│   axes[0]   │   axes[1]   │
└─────────────┴─────────────┘

2行2列(2×2のグリッド)の場合はこうなります。

fig, axes = plt.subplots(2, 2)
Figure
┌─────────────┬─────────────┐
│ axes[0][0]  │ axes[0][1]  │
├─────────────┼─────────────┤
│ axes[1][0]  │ axes[1][1]  │
└─────────────┴─────────────┘

add_axes()との違い

add_axes() plt.subplots()
位置の指定 手動(割合で指定) 自動(均等に並ぶ)
向いている場面 グラフ内にミニグラフを埋め込むなど、不規則なレイアウト 均等なグリッド配置
一般的か あまり使わない こちらが主流

実務やネット上のサンプルコードもほぼplt.subplots()で書かれています。迷ったらplt.subplots()を使うと覚えておけばOKです。add_axes()は特殊なレイアウトが必要なときだけ登場する、と思っておきましょう。

各Axesにグラフを描く

plt.subplots(1, 2)で作ったAxesはaxes[0]axes[1]のようにインデックスでアクセスします。

axes[0].plot(x, np.sin(x))  # 左のAxesにsinを描く
axes[1].plot(x, np.cos(x))  # 右のAxesにcosを描く

これまでax.plot()ax.set_title()と書いてきたaxが、axes[0]axes[1]に変わっただけです。使えるメソッドはまったく同じです。

完成形:全部まとめて書く

sinとcosを左右に並べて表示してみましょう。
コードの量が少し多くなってきましたが、1行ずつ見ればきっと理解できるはずですよ!

import matplotlib.pyplot as plt
import numpy as np

# ① FigureとAxesをまとめて作る(1行2列)
fig, axes = plt.subplots(1, 2)

# ② データ作成
x = np.linspace(0, 10, 100)

# ③ 左のAxes(axes[0])にsinを描く
axes[0].plot(x, np.sin(x), color="blue")
axes[0].set_title("sin(x)")
axes[0].set_xlabel("x")
axes[0].set_ylabel("y")
axes[0].grid(True, linestyle="--", linewidth=0.5)

# ④ 右のAxes(axes[1])にcosを描く
axes[1].plot(x, np.cos(x), color="red")
axes[1].set_title("cos(x)")
axes[1].set_xlabel("x")
axes[1].set_ylabel("y")
axes[1].grid(True, linestyle="--", linewidth=0.5)

# ⑤ レイアウトを整える
fig.tight_layout()

# ⑥ 表示
plt.show()

表示結果

image.png

tight_layout()とは?

fig.tight_layout()はAxes同士が重ならないように余白を自動で調整してくれる関数です。複数のAxesを並べるときはほぼ必ずセットで使います。

呼ばなかった場合、タイトルや軸ラベルが隣のAxesと重なることがあるので、忘れずに書くようにしましょう。

今回追加した内容を整理するとこうなります:

内容 コード
FigureとAxesをまとめて作る fig, axes = plt.subplots(行数, 列数)
各Axesにアクセスする axes[0], axes[1], ...
余白を自動調整する fig.tight_layout()

まとめ

  • 均等に複数のAxesを並べるにはplt.subplots(行数, 列数)を使う
  • plt.subplots()はFigureとAxesをまとめて返してくれる
  • 各Axesへはaxes[0]axes[1]のようにインデックスでアクセスする
  • fig.tight_layout()で余白を自動調整するのを忘れずに

次回は棒グラフや散布図など、折れ線グラフ以外のグラフの種類を見ていきます!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?