Matplotlib에서 여러 개의 서브플롯(subplot)을 만들 때, 각각의 축에 일일이 그래프를 그리는 것은 비효율적입니다. 루프와 함수를 조합하면 반복 작업을 자동화하여 코드를 훨씬 간결하게 유지할 수 있습니다. 이 글에서는 함수와 반복문을 사용해 서브플롯을 체계적으로 채우는 방법을 단계별로 살펴보겠습니다.
구현 단계
- 먼저 figure.figsize로 그림 크기를 설정하고, figure.autolayout을 활성화해 서브플롯 사이의 여백과 패딩을 자동으로 조정합니다.
- plt.subplots() 메서드를 사용해 행 3개, 열 2개로 구성된 Figure와 서브플롯 집합을 생성합니다.
- 각 행의 열(axes)을 순회하면서 해당 열 인덱스마다 plot() 메서드로 x 데이터를 그리는 함수를 정의합니다.
- 행(axes)을 반복하며 난수로 생성한 x 데이터 포인트를 만들고, 앞서 정의한 iterate_columns() 함수를 호출합니다.
- 마지막으로 plt.show() 메서드를 호출해 완성된 그림을 화면에 표시합니다.
예제 코드
import numpy as np
import matplotlib.pyplot as plt
# 그림 크기 및 자동 레이아웃 설정
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
# 3행 2열의 서브플롯 생성
fig, axes = plt.subplots(3, 2)
"""각 행의 열(axes)을 순회하며 그래프 그리기"""
def iterate_columns(cols, x):
for col in cols:
col.plot(x, color='red')
"""행(axes)을 순회하며 난수 데이터 생성 후 함수 호출"""
for row in axes:
x = np.random.normal(0, 1, 100).cumsum()
iterate_columns(row, x)
plt.show()실행 결과
위 코드를 실행하면 3행 × 2열로 배치된 6개의 서브플롯이 생성되며, 각 서브플롯에는 정규분포를 따르는 난수 100개를 누적으로 합산한(cumsum) 빨간색 선 그래프가 그려집니다. 모든 행에서 동일한 x 데이터가 공유되므로, 같은 행에 있는 두 개의 그래프는 동일한 형태를 보이게 됩니다.
코드 핵심 포인트
이 접근 방식의 핵심은 axes 객체가 2차원 배열처럼 순회 가능하다는 점입니다. for row in axes는 각 행을, for col in cols는 행 내부의 개별 축을 순회합니다. 이 구조를 활용하면 서브플롯 개수가 늘어나도 코드 수정 없이 확장할 수 있으며, 데이터 생성 로직과 플로팅 로직을 함수로 분리해 재사용성도 높일 수 있습니다.