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

Matplotlib로 발산형 누적 막대 차트(Diverging Stacked Bar Chart) 만드는 방법

Matplotlib에서 발산형 누적 막대 차트(diverging stacked bar chart)를 만들려면 양수와 음수 데이터를 하나의 막대에 누적하여 기준선(0)을 중심으로 좌우로 퍼지는 형태의 차트를 그리면 됩니다. 아래에서 단계별로 살펴보겠습니다.

구현 단계

  • 그림(figure) 크기를 설정하고 서브플롯 사이 및 주변 여백(padding)을 조정합니다.
  • 인덱스 개수를 담을 변수 N을 초기화합니다.
  • 데이터로 사용할 menMeans, womenMeans, menStd, womenStd 튜플을 준비합니다.
  • 막대의 너비(width)를 초기화합니다.
  • figure와 서브플롯(subplots) 집합을 생성합니다.
  • 발산형 막대를 만들기 위해 양수 값과 음수 값이 섞인 데이터를 사용하고, 두 번째 막대는 bottom 옵션으로 첫 번째 막대 위에 누적합니다.
  • 기준선 역할을 하는 수평선(axhline)을 축을 가로지르도록 추가합니다.
  • Y축 레이블, 제목, X축 눈금(ticks), 눈금 레이블(ticklabels), 범례(legend)를 설정합니다.
  • 그림을 화면에 표시하려면 show() 메서드를 호출합니다.

예제 코드

import matplotlib.pyplot as plt
import numpy as np

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

N = 5
menMeans = (20, -35, 30, 35, -27)
womenMeans = (25, -32, 34, 20, -25)
menStd = (2, 3, 4, 1, 2)
womenStd = (3, 5, 2, 3, 3)

ind = np.arange(N)
width = 0.35
fig, ax = plt.subplots()

p1 = ax.bar(ind, menMeans, width, yerr=menStd, label='Men')
p2 = ax.bar(ind, womenMeans, width, bottom=menMeans, yerr=womenStd, label='Women')
ax.axhline(0, color='grey', linewidth=0.8)
ax.set_ylabel('Scores')
ax.set_title('Scores by group and gender')
ax.set_xticks(ind)
ax.set_xticklabels(('G1', 'G2', 'G3', 'G4', 'G5'))
ax.legend()

plt.show()

실행 결과

위 코드를 실행하면 각 그룹(G1~G5)별로 남성과 여성의 점수가 양수 방향과 음수 방향으로 나뉘어 누적된 발산형 막대 차트가 출력됩니다. 회색 수평선이 0 기준선을 나타내며, 오차 막대(yerr)를 통해 각 값의 표준 편차도 함께 확인할 수 있습니다.

이처럼 bottom 파라미터를 활용해 막대를 누적하고, 양수·음수 데이터를 조합하면 Matplotlib에서 손쉽게 발산형 누적 막대 차트를 구현할 수 있습니다.