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

Pandas 날짜/시간 인덱스를 X축으로 사용할 때 다중 색상 선 그래프 그리는 방법

Pandas의 날짜/시간(Datetime) 인덱스를 X축으로 사용하면서 선의 색상을 값에 따라 다르게 표현하고 싶다면, Matplotlib의 LineCollection을 활용하는 것이 가장 효과적인 방법입니다. 아래 단계를 따라 구현할 수 있습니다.

구현 단계

  • 그림(figure) 크기를 설정하고 서브플롯 주변 및 사이의 여백을 조정합니다.
  • NumPy를 사용하여 d, y, s 데이터 포인트를 생성합니다.
  • Figure와 서브플롯 집합을 생성합니다.
  • NumPy로 xval, p, s 데이터 포인트를 계산합니다.
  • 'hot' 컬러맵과 s 데이터를 이용해 LineCollection 인스턴스를 만듭니다.
  • X축의 major/minor 로케이터(locator)와 포맷터(formatter)를 설정합니다.
  • 데이터 범위에 맞게 뷰 한계(view limits)를 자동으로 조정합니다.
  • show() 메서드를 호출하여 그림을 화면에 표시합니다.

예제 코드

import pandas as pd
from matplotlib import pyplot as plt, dates as mdates, collections as c
import numpy as np

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

d = pd.date_range("2021-01-01", "2021-06-01", freq="7D")
y = np.cumsum(np.random.normal(size=len(d)))
s = pd.Series(y, index=d)

fig, ax = plt.subplots()

xval = mdates.date2num(s.index.to_pydatetime())
p = np.array([xval, s.values]).T.reshape(-1, 1, 2)
s = np.concatenate([p[:-1], p[1:]], axis=1)
lc = c.LineCollection(s, cmap="hot")
lc.set_array(xval)

ax.add_collection(lc)
ax.xaxis.set_major_locator(mdates.MonthLocator())
ax.xaxis.set_minor_locator(mdates.DayLocator())
m = mdates.DateFormatter("%b")
ax.xaxis.set_major_formatter(m)
ax.autoscale_view()

plt.show()

코드 설명

이 코드의 핵심 동작 원리는 다음과 같습니다.

  • 날짜 → 숫자 변환: mdates.date2num()을 사용하여 Pandas의 DatetimeIndex를 Matplotlib가 처리할 수 있는 숫자형 값으로 변환합니다.
  • 선분 세그먼트 생성: 각 데이터 포인트 쌍을 연결하는 선분(segment) 배열을 만들어 LineCollection에 전달합니다.
  • 색상 매핑: set_array(xval)을 통해 X값(날짜)에 따라 'hot' 컬러맵으로 선 색상이 시간 순서대로 변화합니다.
  • 축 서식 지정: MonthLocatorDateFormatter를 사용하여 X축에 월 단위 눈금과 축약된 월 이름(예: Jan, Feb)을 표시합니다.

실행 결과

위 코드를 실행하면 시간의 흐름에 따라 색상이 점진적으로 변하는 다중 색상 선 그래프가 출력됩니다. X축에는 월별 눈금이 표시되며, 각 선분의 색상은 해당 날짜 값을 기준으로 컬러맵에 매핑됩니다.

Pandas 날짜/시간 인덱스를 X축으로 사용할 때 다중 색상 선 그래프 그리는 방법Pandas 날짜/시간 인덱스를 X축으로 사용할 때 다중 색상 선 그래프 그리는 방법