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에서 손쉽게 발산형 누적 막대 차트를 구현할 수 있습니다.