logo

파이썬 matplotlib에서 서브플랏 그리는 법 📂프로그래밍

파이썬 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.subplost(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