Matplotlib에서 중첩 원형 차트(nested pie chart)는 하나의 원 안에 바깥쪽 링과 안쪽 링, 두 겹의 원형 차트를 겹쳐 그리는 도넛(donut) 형태의 시각화 기법입니다. 전체 데이터와 하위 항목 간의 비율 관계를 한눈에 파악할 수 있어 카테고리별 세부 구성을 보여줄 때 특히 유용합니다.
중첩 원형 차트 그리기 절차
- 그림(figure) 크기를 설정하고 서브플롯 주변 및 사이의 여백(padding)을 조정합니다.
- figure 객체와 서브플롯(ax)을 생성합니다.
- size 변수를 초기화한 뒤, numpy를 활용해 vals, cmap, outer_colors, inner_colors 데이터를 준비합니다.
- pie() 함수를 두 번 호출하여 원형 차트를 그립니다. 바깥쪽 링은 각 행의 합계로, 안쪽 링은 개별 값으로 표현합니다.
- show() 메서드를 사용해 최종 그림을 화면에 표시합니다.
예제 코드
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
fig, ax = plt.subplots()
size = 0.3
vals = np.array([[60., 32.], [37., 40.], [29., 10.]])
cmap = plt.get_cmap("tab20c")
outer_colors = cmap(np.arange(3)*4)
inner_colors = cmap([1, 2, 5, 6, 9, 10])
# 바깥쪽 링: 각 행의 합계 기준
ax.pie(vals.sum(axis=1), radius=1, colors=outer_colors,
wedgeprops=dict(width=size, edgecolor='w'))
# 안쪽 링: 개별 값 기준
ax.pie(vals.flatten(), radius=1-size, colors=inner_colors,
wedgeprops=dict(width=size, edgecolor='w'))
plt.show()
핵심 포인트 정리
- size = 0.3: 링(ring)의 두께를 결정하는 값으로, 숫자가 클수록 링이 두꺼워집니다.
- radius=1과 radius=1-size: 바깥쪽 링과 안쪽 링의 반지름을 조정해 두 링이 서로 붙어 있도록 배치합니다.
- wedgeprops=dict(width=size, edgecolor='w'): 조각(wedge)의 너비를 지정해 중앙에 구멍이 있는 도넛 형태를 만들고, 흰색 테두리로 조각 사이를 깔끔하게 구분합니다.
- tab20c 컬러맵: 바깥쪽과 안쪽 링이 색상 계열을 공유하도록 하여 상하위 항목 간의 연관성을 직관적으로 보여줍니다.
출력 결과
