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