"이 보고서에 차트가 네 개 있는데, 각각 따로 파일로 첨부해야 하나요?"
지윤이 물었다. 팀장은 고개를 저었다.
"아니요, 서브플롯으로 한 Figure에 배치하면 돼요."
subplots() — 격자 배치
plt.subplots(rows, cols)로 여러 Axes를 격자 형태로 만듭니다.
import matplotlib.pyplot as pltimport numpy as npimport matplotlibimport platformmatplotlib.rcParams['font.family'] = {'Windows': 'Malgun Gothic', 'Darwin': 'AppleGothic'}.get(platform.system(), 'NanumGothic')matplotlib.rcParams['axes.unicode_minus'] = Falsemonths = ['1월', '2월', '3월', '4월', '5월', '6월']data_a = [120, 145, 130, 160, 175, 190]data_b = [100, 110, 125, 140, 155, 168]fig, axes = plt.subplots(2, 2, figsize=(12, 8)) # 2행 2열# axes는 2×2 NumPy 배열axes[0, 0].plot(months, data_a, color='steelblue', marker='o')axes[0, 0].set_title('서울 방문자')axes[0, 1].bar(months, data_b, color='coral')axes[0, 1].set_title('부산 방문자')axes[1, 0].scatter(data_a, data_b, alpha=0.7)axes[1, 0].set_title('서울 vs 부산 상관관계')axes[1, 1].hist(data_a, bins=5, color='teal')axes[1, 1].set_title('서울 방문자 분포')plt.suptitle('지점별 현황 대시보드', fontsize=16, fontweight='bold')plt.tight_layout()plt.show()


공유 축 (sharex, sharey)
같은 x축 범위를 공유하면 비교가 쉬워집니다.
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 8), sharex=True)ax1.plot(months, data_a)ax1.set_title('서울')ax2.plot(months, data_b, color='coral')ax2.set_title('부산')plt.tight_layout()plt.show()
axes 배열 평탄화
axes.flatten()으로 1차원 배열로 만들면 루프 처리가 편합니다.
fig, axes = plt.subplots(2, 3, figsize=(15, 8))for ax, title in zip(axes.flatten(), ['A', 'B', 'C', 'D', 'E', 'F']): ax.set_title(title)