Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

루프와 함수를 활용해 Matplotlib 서브플롯 자동으로 채우기

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는 행 내부의 개별 축을 순회합니다. 이 구조를 활용하면 서브플롯 개수가 늘어나도 코드 수정 없이 확장할 수 있으며, 데이터 생성 로직과 플로팅 로직을 함수로 분리해 재사용성도 높일 수 있습니다.