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

Matplotlib에서 월별 데이터로 막대 그래프 너비 제어하기

Matplotlib에서 월별 데이터를 다룰 때 각 막대의 너비를 데이터 간격에 맞게 조절하면 그래프가 훨씬 자연스러워집니다. 특히 날짜 축을 사용하는 경우, 막대가 서로 겹치거나 과도하게 떨어지지 않도록 너비를 직접 지정하는 것이 중요합니다.

구현 단계

  • 그림(figure) 크기를 설정하고 서브플롯 주변 및 사이의 여백을 조정합니다.
  • numpy와 datetime 모듈을 사용하여 날짜 리스트 x와 값 리스트 y를 만듭니다.
  • 월별 데이터에 맞춰 x, y 데이터 포인트로 막대 그래프를 그립니다. 이때 인접한 날짜 간의 일수 차이를 계산해 width 매개변수에 전달합니다.
  • show() 메서드를 호출하여 그래프를 화면에 표시합니다.

예제 코드

import numpy as np
import datetime
from matplotlib import pyplot as plt

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

x = [datetime.datetime(2021, 1, 1, 0, 0),
    datetime.datetime(2021, 2, 1, 0, 0),
    datetime.datetime(2021, 3, 1, 0, 0),
    ]

y = np.cos(np.arange(3) * 2)
plt.bar(x, y, width=[(x[j+1]-x[j]).days for j in range(len(x)-1)] + [30])

plt.show()

코드 설명

핵심은 width 매개변수에 리스트를 전달하는 부분입니다. 리스트 컴프리헨션 [(x[j+1]-x[j]).days for j in range(len(x)-1)]는 인접한 두 날짜 사이의 일수 차이를 계산합니다. 예를 들어 1월 1일과 2월 1일 사이는 31일이므로 첫 번째 막대의 너비가 31이 됩니다. 마지막 막대는 다음 데이터가 없기 때문에 기본값인 30일을 추가로 지정했습니다.

이렇게 하면 각 막대가 해당 월의 실제 길이에 비례하여 표시되므로, 시간 흐름에 따른 데이터 변화를 더 정확하게 시각화할 수 있습니다. 윤년처럼 월 길이가 다른 경우에도 자동으로 반영된다는 점이 이 방식의 장점입니다.

실행 결과

위 코드를 실행하면 세 개의 막대가 각각의 월 간격에 맞는 너비로 그려진 막대 그래프가 출력됩니다. 막대들이 날짜 축 위에서 균형 있게 배치되어 가독성이 크게 향상됩니다.