데이터 분석이나 시계열 시각화 작업을 하다 보면 X축에 날짜를 직접 표시해야 하는 경우가 자주 발생합니다. Python의 대표적인 시각화 라이브러리인 Matplotlib를 사용하면 날짜 형식의 데이터를 손쉽게 그래프로 나타낼 수 있습니다. 이 글에서는 X축에 특정 날짜를 지정하여 데이터를 플롯하는 방법을 단계별로 살펴보겠습니다.
구현 단계
그림(figure) 크기를 설정하고 서브플롯 주변 및 사이의 여백(padding)을 조정합니다.
날짜 문자열 목록을 만들고 datetime.strptime()을 사용해 datetime 객체로 변환하여 x축 데이터로 준비합니다.
y축에 표시할 데이터 포인트 목록을 생성합니다.
DateFormatter를 사용해 주 눈금(major ticker)의 포맷터(formatter)를 설정합니다.
DayLocator 등을 사용해 주 눈금의 로케이터(locator)를 설정합니다.
plot() 메서드를 사용해 x, y 데이터 포인트를 그립니다.
show() 메서드를 호출하여 그림을 화면에 표시합니다.
예제 코드
from datetime import datetime
from matplotlib import pyplot as plt, dates as mdates
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
dates = ["01/02/2021", "01/03/2021", "01/04/2021", "01/05/2021", "01/06/2021"]
x = [datetime.strptime(d, "%m/%d/%Y").date() for d in dates]
y = [1, 5, 3, 8, 4]
ax = plt.gca()
ax.xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m-%d"))
ax.xaxis.set_major_locator(mdates.DayLocator())
ax.plot(x, y)
plt.show()코드 설명
위 예제에서 핵심 역할을 하는 요소들을 살펴보면 다음과 같습니다.
1. 날짜 변환 — datetime.strptime()
문자열 형태의 날짜("01/02/2021")는 Matplotlib가 바로 인식할 수 없습니다. strptime() 함수에 포맷 문자열 "%m/%d/%Y"(월/일/연도 순서)를 지정하면 각 문자열이 date 객체로 변환되어 x축 값으로 사용할 수 있게 됩니다.
2. 눈금 포맷터 — DateFormatter
mdates.DateFormatter("%Y-%m-%d")는 X축 눈금에 표시되는 날짜 형식을 2021-01-02와 같은 연-월-일 형태로 지정합니다. 필요에 따라 "%b %d"(예: Jan 02)처럼 다양한 형식으로 변경할 수 있습니다.
3. 눈금 로케이터 — DayLocator
mdates.DayLocator()는 매일을 기준으로 눈금을 배치합니다. 데이터 범위가 넓다면 WeekdayLocator, MonthLocator 등으로 교체하거나 DayLocator(interval=7)처럼 간격을 조절하면 눈금이 과도하게 밀집되는 것을 방지할 수 있습니다.
실행 결과
코드를 실행하면 X축에 2021년 1월 2일부터 6일까지의 날짜가 YYYY-MM-DD 형식으로 표시된 선 그래프가 출력됩니다. y값(1, 5, 3, 8, 4)의 변화 추이를 날짜 기준으로 한눈에 확인할 수 있습니다.
마무리
Matplotlib의 dates 모듈을 활용하면 날짜 축의 형식과 간격을 자유롭게 제어할 수 있습니다. 실무에서는 pandas의 datetime 타입과 함께 사용하는 경우가 많으므로, pd.to_datetime()으로 변환한 후 동일한 방식으로 적용하면 더욱 편리하게 활용할 수 있습니다.