Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Matplotlib Pyplot에서 그래프 최댓값에 자동으로 주석(Annotation) 추가하는 방법

데이터 시각화를 하다 보면 그래프에서 가장 중요한 지점인 최댓값을 눈에 띄게 표시해야 하는 경우가 자주 있습니다. 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: 화살표 스타일 지정 (여기서는 검은색)

이 방식은 데이터가 변경되어도 최댓값의 위치를 자동으로 계산하므로, 동적인 데이터셋에도 유연하게 적용할 수 있다는 장점이 있습니다.

실행 결과

Matplotlib Pyplot에서 그래프 최댓값에 자동으로 주석(Annotation) 추가하는 방법