Matplotlib에서는 annotate() 메서드를 활용하면 그리기 영역(drawing area) 바깥쪽에도 주석(annotation)을 자유롭게 배치할 수 있습니다. 이때 핵심은 xycoords 매개변수에 축 기준 변환(transform) 객체를 지정하는 것입니다.
구현 단계
- 그림(figure) 크기를 설정하고, 서브플롯 사이 및 주변의 여백(padding)을 자동으로 조정합니다.
- Numpy를 사용해 x, y 데이터 포인트를 무작위로 생성합니다.
- subplots() 메서드로 그림과 서브플롯 집합을 만듭니다.
- scatter() 메서드에 별 모양(star) 마커와 copper 컬러맵을 적용해 x, y 데이터를 산점도로 시각화합니다.
- 주석을 그림 외부에 배치하기 위해 xy 좌표 튜플의 값을 1보다 크거나 음수 등 영역 밖 범위로 지정하고, xycoords에 ax.get_xaxis_transform()을 전달합니다.
- show() 메서드로 최종 그림을 화면에 출력합니다.
예제 코드
import numpy as np
from matplotlib import pyplot as plt
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
x = np.random.rand(100)
y = np.random.rand(100)
fig, ax = plt.subplots()
ax.scatter(x, y, c=y, marker="*", cmap="copper")
ax.annotate('Scatter points(outside the drawing)',
xy=(0.30, 1.05),
xycoords=ax.get_xaxis_transform())
plt.show()
코드 설명
ax.get_xaxis_transform()은 x축 방향으로는 데이터 좌표(data coordinates), y축 방향으로는 축 좌표(axes coordinates)를 사용하는 혼합 좌표계를 반환합니다. 따라서 y값을 1.05처럼 1보다 크게 설정하면, 축의 상단 경계보다 위쪽 즉 그림 영역 밖에 주석이 위치하게 됩니다. 이 방법은 그래프 제목과 별개로 특정 위치에 부가적인 설명 텍스트를 넣고 싶을 때 유용합니다.
출력 결과
