데이터 시각화를 하다 보면 그래프에서 가장 중요한 지점인 최댓값을 눈에 띄게 표시해야 하는 경우가 자주 있습니다. Matplotlib의 Pyplot에서는 annotate() 메서드를 활용하면 최댓값 위치에 화살표와 함께 주석을 손쉽게 추가할 수 있습니다.
구현 단계
- 그림 크기 설정: figure 크기를 지정하고 서브플롯 사이의 여백(padding)을 조정합니다.
- figure 생성: 새로운 figure를 만들거나 기존 figure를 활성화합니다.
- 데이터 준비: x축과 y축에 사용할 데이터 포인트 리스트를 작성합니다.
- 그래프 그리기: NumPy를 활용해 x, y 데이터를 플로팅합니다.
- 최댓값 찾기: y 배열에서 최댓값과 해당 값의 위치(인덱스)를 구한 뒤, 그 위치에 대응하는 x값을 계산합니다.
- 주석 추가:
annotate()메서드로 해당 지점에 'local max' 주석을 표시합니다. - 화면 출력:
show()메서드로 완성된 그래프를 확인합니다.
예제 코드
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
fig = plt.figure()
ax = fig.add_subplot(111)
x = np.array([1, 3, 5, 3, 1])
y = np.array([2, 1, 3, 1, 2])
line, = ax.plot(x, y)
# y 배열에서 최댓값과 해당 위치 찾기
ymax = max(y)
xpos = np.where(y == ymax)
xmax = x[xpos]
# 최댓값 지점에 주석 추가
ax.annotate('local max', xy=(xmax, ymax), xytext=(xmax, ymax + 5),
arrowprops=dict(facecolor='black'))
plt.show()
코드 설명
np.where(y == ymax)는 y 배열에서 최댓값이 있는 인덱스를 반환하며, 이를 통해 최댓값의 x 좌표(xmax)를 구할 수 있습니다. 이후 annotate() 메서드에서:
xy: 화살표가 가리킬 실제 데이터 좌표 (최댓값 지점)xytext: 주석 텍스트가 표시될 좌표 (최댓값보다 위쪽)arrowprops: 화살표 스타일 지정 (여기서는 검은색)
이 방식은 데이터가 변경되어도 최댓값의 위치를 자동으로 계산하므로, 동적인 데이터셋에도 유연하게 적용할 수 있다는 장점이 있습니다.
실행 결과
