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

Python Matplotlib에서 서로 다른 간격의 시계열 두 개를 하나의 플롯에 그리는 방법

데이터 분석을 하다 보면 측정 시점이 서로 다른 두 개의 시계열 데이터를 하나의 그래프에 함께 표시해야 하는 경우가 자주 있습니다. Matplotlib를 사용하면 간격이 다른 시계열도 손쉽게 같은 축 위에 그릴 수 있습니다. 이 글에서는 plot_date()와 날짜 포맷터를 활용해 두 시계열을 하나의 플롯에 시각화하는 방법을 단계별로 살펴보겠습니다.

구현 단계

  • 그림(figure) 크기를 설정하고 서브플롯 주변 및 사이의 여백(padding)을 조정합니다.

  • 두 번째 시계열을 위한 x2, y2 데이터 포인트를 생성합니다. 첫 번째 시계열은 x1, y1로 정의합니다.

  • subplots() 메서드를 사용해 figure와 axes 객체를 생성합니다.

  • 날짜 데이터가 담긴 (x1, y1)(x2, y2) 데이터 포인트를 plot_date() 메서드로 플롯합니다.

  • X축 눈금 레이블(ticklabels)의 major formatter를 설정하여 날짜가 원하는 형식으로 표시되도록 합니다.

  • tick_params() 메서드를 사용해 x축 눈금 레이블을 45도 회전시켜 가독성을 높입니다.

  • plt.show() 메서드를 호출하여 그림을 화면에 표시합니다.

예제 코드

import matplotlib.pyplot as plt
from matplotlib.dates import date2num, DateFormatter
import datetime as dt

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

x1 = [date2num(dt.datetime(2021, 1, 15, 1, 1, 1)), date2num(dt.datetime(2021, 1, 15, 9, 1, 1))]

y1 = [6, 2]

x2 = [ date2num(dt.datetime(2021, 1, 15, 2, 1, 1)),
    date2num(dt.datetime(2021, 1, 15, 4, 1, 1)),
    date2num(dt.datetime(2021, 1, 15, 6, 1, 1)),
    date2num(dt.datetime(2021, 1, 15, 8, 1, 1)),
    date2num(dt.datetime(2021, 1, 15, 10, 1, 1))
]

y2 = [3, 6, 5, 4, 1]

fig, ax = plt.subplots()

ax.plot_date(x1, y1, 'o--')
ax.plot_date(x2, y2, 'o:')

ax.xaxis.set_major_formatter(DateFormatter('%H:%M:%S'))
ax.tick_params(rotation=45)

plt.show()

실행 결과

위 코드를 실행하면 아래와 같은 출력 결과를 얻을 수 있습니다 −

Python Matplotlib에서 서로 다른 간격의 시계열 두 개를 하나의 플롯에 그리는 방법

코드 설명

이 예제에서 첫 번째 시계열(x1, y1)은 2개의 데이터 포인트만 가지고 있어 점선('o--') 스타일로, 두 번째 시계열(x2, y2)은 5개의 데이터 포인트를 가지고 있어 파선('o:') 스타일로 각각 다르게 표현했습니다. date2num() 함수는 datetime 객체를 Matplotlib 내부에서 사용하는 숫자형 날짜 값으로 변환해 주며, DateFormatter('%H:%M:%S')를 통해 X축에 시:분:초 형식으로 날짜가 표시됩니다. 이처럼 서로 다른 색상과 마커 스타일을 조합하면 간격이 다른 두 시계열을 한눈에 구분하기 쉽습니다.