logo

Python matplotlibでサブプロットを描く方法 📂プログラミング

Python matplotlibでサブプロットを描く方法

概要

一つのfigureに複数の図を描く方法をいくつか紹介する。以下の方法はシンプルなレイアウトを描く方法で、より複雑なレイアウトを描く方法は、以下を参照してくれ。

コード

plt.subplot(nrows, ncols, index)

plt.subplot(r, c, n)を入力すると、全体のfigureを$r$行、$c$列のグリッドに分け、$n$番目のサブプロットに図を描くことができる。ここでイラッとくる点は、indexがインデキシングではないということだ。従って(パイソンのインデキシングではないので)インデックスは$0$ではなく$1$から始まる。

import matplotlib.pyplot as plt
import numpy as np

plt.subplot(2,2,1)                                              # 좌상단에 히트맵 그리기
plt.imshow(np.random.randn(10,10))

plt.subplot(2,2,2)                                              # 우상단에 선그래프 그리기
plt.plot(np.random.randn(10))

plt.subplot(2,2,3)                                              # 좌하단에 점도표 그리기
plt.scatter(np.random.randn(10), np.random.randn(10))           

plt.subplot(2,2,4)
plt.boxplot(np.random.randn(10,10), positions=np.arange(10))    # 우하단에 상자그림 그리기

plt.show()

plt.subplots(nrows, ncols)

fig, axs = plt.subplots(m, n)は$m \times n$配列のサブプロットを作る。ここでfigは全体のfigureを、axsはサブプロットの配列を意味する。以下のコードは上とまっさら同じ絵を描く。

import matplotlib.pyplot as plt
import numpy as np

fig, axs = plt.subplots(2,2)

axs[0,0].imshow(np.random.randn(10,10))                              # 좌상단에 히트맵 그리기
axs[0,1].plot(np.random.randn(10))                                   # 우상단에 선그래프 그리기
axs[1,0].scatter(np.random.randn(10), np.random.randn(10))           # 좌하단에 점도표 그리기
axs[1,1].boxplot(np.random.randn(10,10), positions=np.arange(10))    # 우하단에 상자그림 그리기

plt.show()

.add_subplot(nrows, ncols, index)

これはfigureというオブジェクトにサブプロットを作るメソッドだ。上と同じ絵を描くコードは以下の通りだ。

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()

ax1 = fig.add_subplot(2,2,1)
ax1.imshow(np.random.randn(10,10))                              # 좌상단에 히트맵 그리기

ax2 = fig.add_subplot(2,2,2)
ax2.plot(np.random.randn(10))                                   # 우상단에 선그래프 그리기

ax3 = fig.add_subplot(2,2,3)
ax3.scatter(np.random.randn(10), np.random.randn(10))           # 좌하단에 점도표 그리기

ax4 = fig.add_subplot(2,2,4)
ax4.boxplot(np.random.randn(10,10), positions=np.arange(10))    # 우하단에 상자그림 그리기

plt.show()

環境

  • OS: Windows11
  • Version: Python 3.9.13, matplotlib==3.6.2, numpy==1.23.5