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축에는 자동으로 적절한 시간 눈금이 생성되어 해당 구간을 직관적으로 확인할 수 있습니다.

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