반응형
파이썬 matplotlib을 사용해서 서브플롯을 그리는 방법 두 가지를 살펴보자.
1. 명시적이고 직관적인 방법
명시적이고 직관적이므로 코드를 통해 살펴본다.
import matplotlib.pyplot as plt
import numpy as np
# 데이터 생성
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)
y4 = x ** 0.5
# Figure와 서브플롯 생성
fig, axs = plt.subplots(2, 2, figsize=(10, 8)) # 2x2 서브플롯
# 첫 번째 서브플롯
axs[0, 0].plot(x, y1, color='blue')
axs[0, 0].set_title('y = sin(x)')
# 두 번째 서브플롯
axs[0, 1].plot(x, y2, color='green')
axs[0, 1].set_title('y = cos(x)')
# 세 번째 서브플롯
axs[1, 0].plot(x, y3, color='red')
axs[1, 0].set_title('y = tan(x)')
axs[1, 0].set_ylim(-5, 5) # tan 그래프 제한
# 네 번째 서브플롯
axs[1, 1].plot(x, y4, color='purple')
axs[1, 1].set_title('y = sqrt(x)')
# 전체 제목 추가
fig.suptitle('Trigonometric Functions and Square Root', fontsize=16)
# 레이아웃 조정
fig.tight_layout(rect=[0, 0, 1, 0.95]) # suptitle 영역 확보
# 그래프 표시
plt.show()

코드의 주요 포인트는 다음과 같다.
plt.subplot(rows, cols)를 사용해서 서브플롯을 생성axs[row, col]을 사용하여 각 서브플롯에 접근set_title()로 각 서브플롯의 제목을 설정 및fig.suptitle()로 전체 제목을 추가fig.tight_layout()로 레이아웃을 자동 조정 및rect를 사용해서suptitle의 공간을 확보
이 방법은 가독성과 유지보수가 쉽다는 장점이 있다.
2. 간단한 작업을 위한 방식
서브플롯이 몇 개 없는 간단한 작업의 경우엔 gca(Get Current Axes)를 사용하면 편하다.
import matplotlib.pyplot as plt
import numpy as np
# 데이터 생성
x = np.linspace(0, 10, 100)
# 서브플롯 1
plt.subplot(2, 1, 1) # (행, 열, 인덱스)
plt.plot(x, np.sin(x), label='y = sin(x)')
plt.gca().set_title('Sine Function') # 현재 축에 제목 추가
plt.legend()
# 서브플롯 2
plt.subplot(2, 1, 2)
plt.plot(x, np.cos(x), label='y = cos(x)', color='orange')
plt.gca().set_title('Cosine Function') # 현재 축에 제목 추가
plt.legend()
# 레이아웃 조정 및 표시
plt.tight_layout()
plt.show()

처음 plt.subplot(row, col, idx)만 잘 설정하면 작업하는 중에 plt.gca().set_title()로 간단하게 서브플롯의 타이틀을 추가할 수 있다.
이 방법은 서브플롯이 많지 않을 때 간단해서 자주 쓴다.
반응형
'머신 러닝 > Python' 카테고리의 다른 글
| [Python] 파이썬 예외 처리(Exception Handling)와 커스텀 예외 만들기 (0) | 2025.02.05 |
|---|---|
| [Python] 파이썬 데코레이터(Decorator) 설명과 활용 예시 (0) | 2025.02.05 |
| [Python] npz 파일 키 확인하는 법 (0) | 2024.08.04 |
| [Python] 파이썬에서 숫자에 콤마(,)찍어서 출력하는 방법 (0) | 2024.07.14 |
| [Python] for문을 사용하지 않은 List Comprehension 예제 (1) | 2024.07.12 |