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

Pandas로 시계열 그래프 그리기 – X축 메이저·마이너 눈금(Tick)과 레이블 설정 방법

Pandas를 활용하면 날짜(시간)와 값 데이터를 담은 데이터프레임을 손쉽게 만들 수 있고, 이를 바탕으로 원하는 형태의 시계열 그래프를 그릴 수 있습니다. 이 글에서는 기본적인 시계열 플롯을 생성한 뒤, Matplotlib의 mdates 모듈을 사용해 X축의 메이저(major)·마이너(minor) 눈금과 레이블을 세밀하게 조정하는 방법까지 예제 코드와 함께 살펴봅니다.

구현 단계

  • 기본 BitGenerator(PCG64)를 사용하는 새로운 Generator 객체를 생성합니다.

  • Pandas의 date_range()를 이용해 '2020-01-01'부터 '2021-01-01'까지 일(Day) 단위의 고정 빈도 DatetimeIndex를 만듭니다.

  • 로그정규(log-normal) 분포에서 샘플 값을 추출합니다.

  • 위 데이터를 바탕으로 데이터프레임을 구성합니다.

  • 데이터프레임의 plot() 메서드로 figsize=(10, 5) 크기의 그래프를 생성합니다.

  • plt.show() 메서드를 호출해 그래프를 화면에 표시합니다.

예제 코드

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt

rng = np.random.default_rng(seed=1)
date_day = pd.date_range(start='2020-01-01', end='2021-01-01', freq='D')
traffic = rng.lognormal(sigma=2, size=date_day.size)
df_day = pd.DataFrame(dict(speed=[pow(2, -i) for i in range(len(date_day))]),
index=date_day)

df_day.plot(figsize=(10, 5))

plt.show()

실행 결과

Pandas로 시계열 그래프 그리기 – X축 메이저·마이너 눈금(Tick)과 레이블 설정 방법

X축 메이저·마이너 눈금 및 레이블 설정하기

기본 플롯은 눈금 간격이 자동으로 결정되기 때문에 원하는 주기대로 표시되지 않을 수 있습니다. 이럴 때는 matplotlib.dates 모듈의 Locator와 Formatter를 사용하면 됩니다. 아래 예제는 메이저 눈금을 매월 1일로, 마이너 눈금을 매주 월요일로 지정하고, 메이저 눈금 레이블 형식을 '연-월'로 변경하는 코드입니다.

import matplotlib.dates as mdates

fig, ax = plt.subplots(figsize=(10, 5))
df_day.plot(ax=ax)

# 메이저 눈금: 매월 1일, 레이블 형식 'YYYY-MM'
ax.xaxis.set_major_locator(mdates.MonthLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m'))

# 마이너 눈금: 매주 월요일
ax.xaxis.set_minor_locator(mdates.WeekdayLocator(byweekday=mdates.MO))

plt.show()

MonthLocator(), WeekdayLocator() 외에도 DayLocator(), HourLocator() 등 다양한 로케이터가 제공되므로, 데이터의 시간 단위에 맞게 눈금 간격을 자유롭게 조절할 수 있습니다. 눈금 레이블의 크기나 회전 각도를 바꾸려면 plt.xticks(rotation=45)처럼 옵션을 추가하면 됩니다.