프로그래밍 언어/Python

주요 경제지표 그래프 한 번에 시각화하기

· 코딩마이데이

액셀 파일의 각 워크시트를 반복문으로 불러온 뒤, matplotlib 패키지의 subplots() 함수를 사용해 2행 2열의 레이아웃에 네 개의 그래프를 배치하겠습니다.

비주얼 스튜디오 코드에 새로운 파일을 생성하고 파일명을 'step_3_2.py'로 수정합니다. 다음과 같이 코드를 입력한 뒤, 대화형 창에서 실행하면 'output' 폴더에 'step_3_2.png' 파일이 생성됩니다.

from pathlib import Path
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
from matplotlib.axes import Axes
from step_1_1 import OUT_DIR # 이전에 작성한 모듈을 불러옵니다.
from step_2_2 import OUT_2_2

# 시각화 스타일 지정
sns.set_theme(context="poster", style="whitegrid", font="Malgun Gothic")
sns.set_style({"grid.linestyle": ":", "grid.color": "#CCCCCC"})

fig, axes = plt.subplots(figsize=(16, 9), dpi=100, nrows=2, ncols=2) # 13
sheet_names = [["국고채", "회사채"], ["코스피지수", "원달러환율"]] # 14
for idx_row, row in enumerate(sheet_names): # 15
    for idx_col, name in enumerate(row): # 16
        df_raw = pd.read_excel(OUT_2_2, sheet_name=name, dtype="string")
        df_raw["TIME"] = pd.to_datetime(df_raw["TIME"], format="%Y%m%d")
        df_raw["DATA_VALUE"] = df_raw["DATA_VALUE"].astype(float)
        df_tail = df_raw.tail(100)  # 마지막 100개의 데이터만 사용
        ax: Axes = axes[idx_row][idx_col]  # 시각화에 사용할 Axes 객체 지정 # 21
         
        sns.lineplot(data=df_tail, x="TIME", y="DATA_VALUE", ax=ax)
        sns.despine(top=True, right=True, bottom=True, left=True)

        ax.set_title(name)  # 그래프 제목
        ax.xaxis.set_visible(False)  # 가로축 전체 숨김
        ax.set_ylabel(None)  # 세로축 제목 제거 # 28
        ax.set_facecolor("#EEEEEE")  # 배경색 지정

fig.set_layout_engine("tight") # 이미지 여백 제거
fig.savefig(OUT_DIR / f"{Path(__file__).stem}.png")

13 함수 subplots()를 사용해서 이미지의 크기와 해상도를 지정하고, 2행 2열 레이아웃에 네 개의 Axes 객체를 생성합니다. 변수 axes에는 Axes 객체가 중첩 리스트 타입으로 저장됩니다.

14 액셀 워크 시트의 이름을 2행 2열 레이아웃에 맞춰 리스트 형식으로 생성하고 변수 sheet_name에 저장합니다.

15~16 국고채와 회사채 그래프를 1행에, 코스피지수와 원달러 환율 그래프를 2열에 배치할 수 있도록 반복문을 중첩합니다.

21 변수 axes에 저장된 객체 Axes를 하나씩 다루기 위해 변수 ax에 저장합니다.

28 함수 set_facecolor()를 사용해 그래프의 배경을 회색(#EEEEEE)으로 채웁니다.