데이터 시각화에서 여러 개의 서브플롯(subplot)을 하나의 그림으로 배치할 때, 각 패널에 A, B, C 같은 알파벳 레이블을 붙이면 논문이나 보고서에서 각 그림을 쉽게 참조할 수 있습니다. 이 글에서는 Python의 Matplotlib 라이브러리를 사용해 서브플롯에 알파벳 주석을 추가하는 방법을 단계별로 살펴보겠습니다.
구현 단계
- 그림 크기를 설정하고 서브플롯 사이와 주변의 여백(padding)을 조정합니다.
nrows=1,ncols=3으로 설정된 figure와 서브플롯 집합을 생성합니다.- 배열에 대한 1차원 이터레이터를 만듭니다.
- 각 축(axes)을 순회하면서 데이터를 이미지 형태로 표시합니다.
- 반복문 안에서
string.ascii_uppercase를 활용해 A, B, C 텍스트를 배치합니다. show()메서드를 호출해 최종 그림을 화면에 출력합니다.
예제 코드
import numpy as np
from matplotlib import pyplot as plt
import string
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
fig, axs = plt.subplots(1, 3)
axs = axs.flat
for index, ax in enumerate(axs):
ax.imshow(np.random.randn(4, 4), interpolation='nearest',
cmap="copper")
ax.text(0.45, 1.1, string.ascii_uppercase[index],
transform=ax.transAxes,
size=20, weight='bold')
plt.show()코드 설명
핵심 포인트는 ax.text() 메서드의 사용 방식입니다. 좌표 변환(transform)을 ax.transAxes로 지정하면, 데이터 좌표가 아닌 축 기준 좌표계(0~1 범위)를 사용하게 됩니다. 따라서 y값을 1.1로 설정하면 각 서브플롯 영역 바로 위쪽에 텍스트가 위치하게 됩니다.
또한 string.ascii_uppercase[index]를 사용하면 반복 인덱스에 따라 자동으로 'A', 'B', 'C'... 문자가 할당되므로, 서브플롯 개수가 늘어나도 코드 수정 없이 확장할 수 있다는 장점이 있습니다.
실행 결과
위 코드를 실행하면 가로로 나열된 3개의 서브플롯에 무작위 4×4 배열이 'copper' 컬러맵으로 표시되고, 각 패널 상단에 굵은 글씨의 A, B, C 레이블이 나타납니다.
마무리
이 방식은 과학 논문, 기술 문서 등에서 다중 패널 그림에 표준적인 레이블을 붙일 때 널리 사용됩니다. 폰트 크기(size)나 굵기(weight), 텍스트 위치 좌표를 조정하면 원하는 스타일로 손쉽게 커스터마이징할 수 있습니다.