Matplotlib에서 Axes(좌표축 영역)나 Figure(전체 그림) 같은 객체를 함수의 인자로 전달하면, 반복되는 시각화 코드를 깔끔하게 모듈화할 수 있습니다. 이 글에서는 여러 개의 서브플롯을 생성하고, 각 축(ax)을 별도의 플롯 함수에 넘겨 그래프를 그리는 방법을 단계별로 살펴보겠습니다.
구현 단계
- Figure 크기를 설정하고 서브플롯 주변 및 사이의 여백(패딩)을 자동으로 조정합니다.
- plot() 메서드에서는 인자로 받은 축(ax) 위에 x, y 데이터 포인트를 그립니다.
- profile() 메서드에서는 Figure와 서브플롯 집합을 생성한 뒤, 각 축을 순회(iterate)하면서 plot() 메서드에 전달하여 그래프를 그립니다.
- 3행 4열 구성으로 profile() 메서드를 호출합니다.
- 마지막으로 show() 메서드를 사용해 결과 Figure를 화면에 표시합니다.
예제 코드
import numpy as np
from matplotlib import pyplot as plt
plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True
def plot(ax, x, y):
ax.plot(x, y)
def profile(rows, cols):
fig, axes = plt.subplots(rows, cols)
for ax in axes:
for a in ax:
plot(a, np.random.rand(10), np.random.rand(10))
profile(3, 4)
plt.show()실행 결과
위 코드를 실행하면 3×4 형태로 배치된 총 12개의 서브플롯이 생성되고, 각 축에는 무작위 데이터가 담긴 그래프가 렌더링됩니다.


핵심 정리
이 패턴의 핵심은 개별 축 객체(ax)를 독립된 함수에 넘겨준다는 점입니다. 이렇게 하면 하나의 플롯 로직을 여러 서브플롯에 재사용할 수 있어 코드가 훨씬 간결해지고 유지보수가 쉬워집니다. 참고로 plt.subplots()는 행과 열이 각각 1개일 때 단일 Axes 객체를 반환하고, 그렇지 않으면 Axes 배열을 반환하므로 상황에 맞게 순회 처리하는 것이 좋습니다.