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

Matplotlib에서 날짜/시간 축 위에 사각형 그리는 방법

Matplotlib로 날짜/시간 축에 사각형 그리기

데이터 시각화 작업을 하다 보면 특정 시간 구간을 강조하기 위해 날짜/시간(datetime) 축 위에 사각형을 그려야 하는 경우가 있습니다. Matplotlib의 Rectangle 패치와 matplotlib.dates(mdates) 모듈을 함께 사용하면 이를 간단하게 구현할 수 있습니다.

구현 단계

  • 그림(figure) 크기를 설정하고 서브플롯 주변 및 사이의 여백(padding)을 조정합니다.
  • 새 figure를 생성하거나 기존 figure를 활성화합니다.
  • add_subplot() 메서드를 사용하여 figure에 '~.axes.Axes'를 서브플롯으로 추가합니다.
  • 사각형의 위치를 정의하기 위해 datetime 객체와 matplotlib의 dates 유틸리티(mdates.date2num())를 사용해 기준 좌표(anchor point)를 계산합니다.
  • add_patch() 메서드를 사용하여 '~.Patch'(사각형)를 축에 추가합니다.
  • x축의 주 눈금 locator와 formatter를 설정합니다.
  • x축과 y축의 표시 범위를 지정합니다.
  • show() 메서드를 호출하여 그림을 화면에 표시합니다.

예제 코드

from datetime import datetime, timedelta
from matplotlib.patches import Rectangle

import matplotlib.pyplot as plt
import matplotlib.dates as mdates

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

fig = plt.figure()

ax = fig.add_subplot(111)

startTime = datetime.now()
endTime = startTime + timedelta(seconds=1)
start = mdates.date2num(startTime)
end = mdates.date2num(endTime)

width = end – start
rect = Rectangle((start, 0), width, 1, color='red')
ax.add_patch(rect)

locator = mdates.AutoDateLocator(minticks=3)
formatter = mdates.AutoDateFormatter(locator)

ax.xaxis.set_major_locator(locator)
ax.xaxis.set_major_formatter(formatter)

plt.xlim([start - width, end + width])
plt.ylim([-.5, 1.5])

plt.show()

실행 결과

코드를 실행하면 현재 시간부터 1초 뒤까지의 시간 구간을 나타내는 빨간색 사각형이 날짜/시간 축 위에 표시됩니다. x축에는 자동으로 적절한 시간 눈금이 생성되어 해당 구간을 직관적으로 확인할 수 있습니다.

Matplotlib에서 날짜/시간 축 위에 사각형 그리는 방법

핵심 포인트 정리

  • mdates.date2num(): datetime 객체를 Matplotlib가 내부적으로 사용하는 숫자형 날짜 값으로 변환합니다. 사각형의 너비를 계산할 때 반드시 필요합니다.
  • AutoDateLocator / AutoDateFormatter: 데이터 범위에 맞춰 눈금 간격과 날짜 형식을 자동으로 조절해 줍니다.
  • add_patch(): Rectangle, Circle 등 다양한 패치 객체를 축에 추가할 때 사용하는 표준 메서드입니다.