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

Matplotlib에서 X축에 특정 날짜를 표시하며 데이터 그래프 그리는 방법

데이터 분석이나 시계열 시각화 작업을 하다 보면 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()으로 변환한 후 동일한 방식으로 적용하면 더욱 편리하게 활용할 수 있습니다.