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

Pandas와 Matplotlib로 여러 시계열 DataFrame을 하나의 플롯에 그리기

Pandas를 활용하면 여러 개의 시계열 DataFrame 데이터를 손쉽게 하나의 플롯(그래프) 위에 겹쳐서 시각화할 수 있습니다. 이 글에서는 두 개의 서로 다른 시계열 데이터(루피, 달러)를 한 화면에 함께 그리는 방법을 단계별로 살펴보겠습니다.

구현 단계

  • 먼저 그림 크기(figure size)를 설정하고, 서브플롯 주변과 사이의 여백(padding)을 자동으로 조정합니다.
  • 시계열 데이터를 포함하는 Pandas DataFrame을 생성합니다.
  • 날짜 열을 DatetimeIndex로 변환하여 시계열 인덱스로 지정합니다.
  • 루피(rupees)와 달러(dollar) 두 데이터를 같은 플롯에 그립니다. 이때 단위가 다른 경우 secondary_y 옵션을 사용해 보조 y축을 활용할 수 있습니다.
  • 마지막으로 show() 메서드를 호출하여 그래프를 화면에 표시합니다.

예제 코드

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

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

df = pd.DataFrame(dict(date=list(pd.date_range("2021-01-01", periods=10)), rupees=np.linspace(1, 10, 10), dollar=np.linspace(10, 20, 10)))

df.set_index(pd.to_datetime(df.date), drop=True).plot()
df = df.set_index(pd.to_datetime(df.date), drop=True)
df.rupees.plot(grid=True, label="rupees", legend=True)
df.dollar.plot(secondary_y=True, label="dollar", legend=True)

plt.show()

코드 설명

pd.date_range("2021-01-01", periods=10)은 2021년 1월 1일부터 시작하는 10일치 날짜를 생성하며, np.linspace를 통해 루피는 1~10, 달러는 10~20 범위의 값을 만듭니다. set_index(pd.to_datetime(df.date))로 날짜 열을 인덱스로 변환하면 x축이 자동으로 날짜 형식으로 표시됩니다.

특히 secondary_y=True 옵션은 값의 스케일이 서로 다른 두 시계열을 비교할 때 유용합니다. 루피는 왼쪽 y축, 달러는 오른쪽 보조 y축에 각각 대응되어 두 추세를 동시에 명확하게 확인할 수 있습니다.

실행 결과

Pandas와 Matplotlib로 여러 시계열 DataFrame을 하나의 플롯에 그리기

위 코드를 실행하면 루피와 달러의 시간에 따른 변화가 하나의 그래프에 함께 나타나며, 범례(legend)와 격자선(grid)을 통해 가독성이 향상된 결과를 확인할 수 있습니다.