Matplotlib에서 종횡비(가로세로 비율)가 동일한 그래프의 모서리에 텍스트를 배치하려면 annotate() 메서드와 axes fraction 좌표계를 활용하면 됩니다. 아래에서 단계별로 자세히 알아보겠습니다.
구현 단계
- 그림 크기를 설정하고 서브플롯 간 및 주변 여백(padding)을 조정합니다.
- subplots() 메서드를 사용하여 그림과 서브플롯 집합을 생성합니다.
- numpy를 이용해 x 데이터 포인트를 만듭니다.
- plot() 메서드로 첫 번째 축(ax1)에 x 값을 플롯합니다.
- plot() 메서드로 두 번째 축(ax2)에 x와 2*x를 플롯합니다.
- 각 축에 대해 annotate() 메서드를 사용하여 그래프 모서리에 텍스트를 배치합니다.
- show() 메서드로 최종 그림을 화면에 표시합니다.
예제 코드
from matplotlib import pyplot as plt
import numpy as np
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
fig, axes = plt.subplots(2)
x = np.linspace(-2, 2, 10)
axes[0].plot(x)
axes[1].plot(x, 2*x)
for ax in axes:
ax.annotate('Straight Line', xy=(1, 0), xycoords='axes fraction',
fontsize=10, horizontalalignment='right', verticalalignment='bottom')
plt.show()
코드 핵심 포인트
이 코드의 핵심은 annotate() 메서드의 xycoords='axes fraction' 옵션입니다. 이 옵션을 사용하면 데이터 좌표가 아닌 축을 기준으로 한 상대적 좌표(0~1 범위)로 텍스트 위치를 지정할 수 있습니다. 예를 들어 xy=(1, 0)은 축의 오른쪽 하단 모서리를 의미합니다.
또한 horizontalalignment='right'와 verticalalignment='bottom' 옵션을 함께 지정하면 텍스트가 모서리 안쪽으로 깔끔하게 정렬되어 그려집니다. 덕분에 그래프 크기나 데이터 범위가 달라져도 텍스트는 항상 동일한 위치에 유지됩니다.
실행 결과
위 코드를 실행하면 두 개의 서브플롯이 세로로 나란히 배치되고, 각 그래프의 오른쪽 하단 모서리에 'Straight Line'이라는 텍스트가 표시됩니다. 이 방식은 그래프에 라벨이나 주석을 일관되게 추가하고 싶을 때 매우 유용합니다.