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

Python Matplotlib 재무 그래프에서 주말(빈 날짜) 건너뛰는 방법

Matplotlib으로 작성한 재무 그래프에서 주말을 제외하고 싶다면, 데이터프레임의 날짜를 순회하면서 요일이 토요일(5) 또는 일요일(6)에 해당하는 경우에는 그리지 않고 건너뛰면 됩니다.

구현 단계

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

  • 날짜(time)를 키로 갖는 데이터프레임을 생성합니다.

  • 데이터프레임의 인덱스와 날짜를 zip으로 묶어 반복(iterate)합니다.

  • 반복 중인 타임스탬프의 요일이 5(토요일) 또는 6(일요일)이라면 해당 지점은 그리지 않습니다.

  • 그 외의 요일인 경우에만 데이터 포인트를 플로팅합니다.

  • Y축의 현재 눈금(tick) 위치를 설정합니다.

  • 격자선(grid line)이 있는 플롯 레이아웃을 구성합니다.

  • 그림을 화면에 표시하려면 show() 메서드를 사용합니다.

예제 코드

import pandas as pd
from matplotlib import pyplot as plt
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
df = pd.DataFrame(dict(time=list(pd.date_range(start="2021-01-01", end="2021-01-15"))))
for i, t in zip(df.index, df.time):
    if t.weekday() in (5, 6):
        pass
    else:
        plt.plot(i, t, marker="*", ms=10)
plt.yticks(df.time)
plt.grid(True)
plt.show()

실행 결과

Python Matplotlib 재무 그래프에서 주말(빈 날짜) 건너뛰는 방법

추가 팁: X축 기준으로 주말을 건너뛰는 방법

위 예제에서는 Y축에 날짜를 배치했지만, 실제 재무 차트에서는 보통 X축에 시간이 위치합니다. 이 경우 pandas.date_range로 생성한 날짜 중 평일만 필터링하여 인덱스를 다시 매기면, 주말 구간 없이 연속된 그래프를 얻을 수 있습니다.

dates = pd.date_range(start="2021-01-01", end="2021-01-15")
dates = [d for d in dates if d.weekday() < 5]  # 평일만 남김
# 이후 x축에 dates의 인덱스를 사용하고,
# plt.xticks(range(len(dates)), [d.strftime("%m-%d") for d in dates]) 로 라벨 지정

이 방식을 활용하면 주식 가격처럼 거래일에만 데이터가 존재하는 시계열 데이터를 자연스럽게 시각화할 수 있으며, 주말로 인해 발생하는 빈 공간 없이 깔끔한 차트를 만들 수 있습니다.