파이썬 시각화로 배우는 도넛 차트 그리기와 중첩 방법

파이썬 시각화 중첩 도넛 차트

파이썬 시각화를 사용하면 복잡한 데이터를 아름답고 이해하기 쉬운 차트로 표현할 수 있습니다. 특히, 도넛 차트는 비율을 시각화할 때 매우 유용한 도구입니다. 하지만 단순히 비율만 표현하는 것으로 만족하지 마세요! 중첩된 도넛 차트를 활용하면 트렌디하고 심층적인 시각화를 만들 수 있습니다.

이 글에서는 파이썬 시각화 라이브러리인 matplotlib을 사용해 도넛 차트를 단계별로 그리는 방법을 배웁니다. 기본적인 도넛 차트부터 중첩 도넛 차트를 그리는 고급 테크닉까지 자세히 다룰 예정이니 차근차근 따라오세요!

도넛 차트란 무엇인가요?

도넛 차트는 파이 차트의 변형으로 가운데 부분이 비어있는 형태입니다. 이 빈 공간이 차트의 깔끔함을 더하고 추가적인 정보를 넣기에도 유리합니다.

주요 특징

  • 데이터 비율을 직관적으로 보여줍니다.
  • 여러 데이터를 중첩해 표현하면 다차원적 시각화가 가능합니다.
  • 깔끔하고 현대적인 디자인이 트렌디한 데이터 시각화에 적합합니다.

파이썬 시각화로 기본 차트 그리기

파이썬 시각화 도넛 차트

먼저, 위 와 같은 기본 차트를 그리는 방법부터 살펴보겠습니다. 여기서는 matplotlib를 활용합니다.

파이썬 코드 예제 – 기본 도넛 차트

# 라이브러리 불러오기
import matplotlib.pyplot as plt  

# 데이터 설정  
labels = ['Country A', 'Country B', 'Country C', 'Country D']  
sizes = [30, 20, 35, 15]  
colors = ['#ff9999', '#66b3ff', '#99ff99', '#ffcc99']  

# 도넛 차트 생성  
fig, ax = plt.subplots()  
ax.pie(sizes, labels=labels, colors=colors, wedgeprops=dict(width=0.3), autopct='%1.1f%%')  

# 가운데 원 추가 (도넛 형태로 만들기)  
centre_circle = plt.Circle((0, 0), 0.70, fc='white')  
fig.gca().add_artist(centre_circle)  

# 차트 제목 설정  
plt.title('Basic Donut Chart')  
plt.show()

중첩 차트 그리기

중첩 차트는 데이터의 두 가지 계층을 동시에 시각화할 때 사용합니다. 각 레이어가 데이터를 더 풍부하게 보여주죠.

파이썬 코드 예제 – 중첩 도넛 차트

import matplotlib.pyplot as plt  

# 외부 도넛 데이터 설정  
outer_labels = ['Germany', 'France', 'China', 'UK', 'Italy']  
outer_sizes = [30, 23, 16, 18, 13]  

# 내부 도넛 데이터 설정  
inner_labels = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']  
inner_sizes = [15, 15, 12, 11, 8, 8, 9, 9, 7, 6]  

# 색상 설정  
outer_colors = plt.cm.Blues([0.6, 0.7, 0.8, 0.9, 1.0])  
inner_colors = plt.cm.RdYlBu_r([0.6, 0.6, 0.7, 0.7, 0.8, 0.8, 0.9, 0.9, 1.0, 1.0])  

# 중첩 도넛 차트 생성  
fig, ax = plt.subplots()  

# 바깥쪽 도넛 레이어  
ax.pie(outer_sizes, labels=outer_labels, radius=1.3, colors=outer_colors,  
       wedgeprops=dict(width=0.3), labeldistance=1.1, autopct='%1.1f%%', pctdistance=0.85)  

# 안쪽 도넛 레이어  
ax.pie(inner_sizes, labels=inner_labels, radius=1.0, colors=inner_colors,  
       wedgeprops=dict(width=0.3), labeldistance=0.7, autopct='%1.1f%%', pctdistance=0.6)  

# 가운데 비우기 (도넛 형태 완성)  
centre_circle = plt.Circle((0, 0), 0.6, fc='white')  
fig.gca().add_artist(centre_circle)  

# 타이틀 설정 (pad 옵션으로 간격 조정)  
plt.title('Improved Nested Donut Chart with Adjusted Labels', pad=30)  

# 레이아웃 설정  
plt.tight_layout()  
plt.show()

흔히 하는 실수

  • 데이터가 과도하게 많을 때: 항목이 너무 많으면 차트가 복잡해집니다. 주요 데이터만 포함하세요.
  • 색상의 혼란: 비슷한 색상을 사용하면 항목 구분이 어려울 수 있습니다. 컬러 팔레트를 활용하세요.
  • 비율과 라벨 불일치: autopct를 통해 정확한 비율이 표시되도록 확인해야 합니다.

자주 묻는 질문 (FAQ)

Q1. 이 차트는 언제 사용하면 좋나요?
이 차트는 비율
비교가 필요하지만 깔끔하고 현대적인 디자인이 필요한 상황에 적합합니다.

Q2. 중첩 도넛 차트의 용도는 무엇인가요?
두 계층의 데이터를 동시에 비교하고 분석할 때 효과적입니다.

Q3. 파이 차트와의 차이점은 무엇인가요?
도넛 차트는 가운데가 비어있어 추가 정보를 표시하거나 디자인적으로 더 우수합니다.

마무리

도넛 차트는 파이 차트의 단조로움을 벗어나 파이썬 시각화에서 인기 있는 기법입니다. 기본 차트부터 중첩 차트까지 따라 했다면 이제 실전 데이터를 활용해 멋진 도넛 차트를 만들어보세요! 데이터 시각화의 매력에 한 걸음 더 다가가게 될 것입니다.

참고로, 파이썬 시각화 분야 중에 시계열 분석하는 분들이 많은데요. 파이썬 데이터분석 예제: S&P 500 주식 데이터 시계열 분석 및 미래 가격 예측하기 포스트를 통해서 그 지식을 습득해보세요!

# 코드 세부해설

기본 차트 그리기

# 라이브러리 불러오기  
import matplotlib.pyplot as plt  
  1. 라이브러리 불러오기
  • matplotlib.pyplot: 데이터 시각화를 위해 사용하는 matplotlib의 서브 모듈입니다.
  • 이 모듈은 그래프, 차트 등을 그리는 데 활용됩니다.
# 데이터 설정  
labels = ['Country A', 'Country B', 'Country C', 'Country D']  
sizes = [30, 20, 35, 15]  
colors = ['#ff9999', '#66b3ff', '#99ff99', '#ffcc99']  
  1. 데이터 설정
  • labels: 각 조각(섹션)의 이름입니다. 예: ‘Country A’, ‘Country B’ 등.
  • sizes: 각 조각의 비율을 설정합니다. 예: 30%, 20%, 35%, 15%.
  • colors: 각 섹션에 사용할 색상 코드입니다.
    • '#ff9999': 연분홍색
    • '#66b3ff': 하늘색
    • '#99ff99': 연두색
    • '#ffcc99': 주황빛 색상
# 도넛 차트 생성  
fig, ax = plt.subplots()  
  1. 차트 생성
  • fig, ax: figure(캔버스)와 axes(그래프가 그려질 영역)를 생성합니다.
  • plt.subplots(): 새로운 차트를 그리기 위한 공간을 준비합니다.
ax.pie(sizes, labels=labels, colors=colors, wedgeprops=dict(width=0.3), autopct='%1.1f%%')  
  1. 도넛 차트 생성
  • sizes: 각 섹션(조각)의 비율을 나타냅니다.
  • labels=labels: 섹션에 표시될 라벨(이름)을 설정합니다.
  • colors=colors: 섹션의 색상을 설정합니다.
  • wedgeprops=dict(width=0.3): 도넛 형태를 만들기 위해 조각의 너비를 조정합니다.
    • width=0.3은 원 전체 너비 중 안쪽 70%를 비우는 설정입니다.
  • autopct='%1.1f%%': 각 조각에 비율(%)을 표시합니다.
    • %1.1f: 소수점 첫째 자리까지 표시하도록 설정합니다.
# 가운데 원 추가 (도넛 형태로 만들기)  
centre_circle = plt.Circle((0, 0), 0.70, fc='white')  
fig.gca().add_artist(centre_circle)  
  1. 가운데 원 추가 (도넛 형태로 만들기)
  • plt.Circle((0, 0), 0.70, fc='white'):
    • (0, 0): 원의 중심 좌표입니다.
    • 0.70: 원의 반지름을 설정합니다.
    • fc='white': 원의 색상을 흰색으로 설정합니다.
  • fig.gca().add_artist(centre_circle):
    • 현재 axes(그래프 영역)에 위에서 생성한 흰색 원을 추가합니다.
  • 이 코드 덕분에 가운데가 비어있는 도넛 형태가 완성됩니다.
# 차트 제목 설정  
plt.title('Basic Donut Chart')  
  1. 차트 제목 설정
  • plt.title(): 차트 상단에 제목을 추가합니다.
  • 'Basic Donut Chart': 차트의 제목 문자열입니다.
plt.show()  
  1. 결과 출력
  • plt.show(): 차트를 화면에 표시합니다.
  • 이 명령어를 실행해야 차트가 최종적으로 출력됩니다.

중첩 차트 그리기

import matplotlib.pyplot as plt  
  1. 라이브러리 불러오기
  • 데이터 시각화를 위한 matplotlibpyplot 모듈을 가져옵니다.
# 외부 도넛 데이터 설정  
outer_labels = ['Germany', 'France', 'China', 'UK', 'Italy']  
outer_sizes = [30, 23, 16, 18, 13]  
  1. 외부 도넛 데이터 설정
  • outer_labels: 바깥 도넛에 표시될 각 조각의 이름입니다.
  • outer_sizes: 바깥 도넛의 각 조각의 비율(%)을 나타냅니다.
# 내부 도넛 데이터 설정  
inner_labels = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']  
inner_sizes = [15, 15, 12, 11, 8, 8, 9, 9, 7, 6]  
  1. 내부 도넛 데이터 설정
  • inner_labels: 안쪽 도넛에 표시될 각 조각의 이름입니다.
  • inner_sizes: 안쪽 도넛의 각 조각의 비율로, 외부 조각의 비율에 맞게 나누어 설정합니다.
# 색상 설정  
outer_colors = plt.cm.Blues([0.6, 0.7, 0.8, 0.9, 1.0])  
inner_colors = plt.cm.RdYlBu_r([0.6, 0.6, 0.7, 0.7, 0.8, 0.8, 0.9, 0.9, 1.0, 1.0])  
  1. 색상 설정
  • plt.cm.Blues: 바깥 도넛에 사용할 색상 팔레트로 파란색 계열의 음영을 만듭니다.
  • plt.cm.RdYlBu_r: 내부 도넛에 사용할 색상 팔레트로 붉은색-노란색-파란색의 조합을 적용합니다.
  • [] 안의 숫자는 색상의 진하기(0~1)를 설정합니다.
# 중첩 도넛 차트 생성  
fig, ax = plt.subplots()  
  1. 차트 생성
  • fig, ax: 새로운 figure와 axes 객체를 생성합니다.
  • plt.subplots(): 차트를 그릴 캔버스를 준비합니다.
# 바깥쪽 도넛 레이어  
ax.pie(outer_sizes, labels=outer_labels, radius=1.3, colors=outer_colors,  
       wedgeprops=dict(width=0.3), labeldistance=1.1, autopct='%1.1f%%', pctdistance=0.85)  
  1. 바깥쪽 도넛 생성
  • outer_sizes: 바깥쪽 도넛의 비율을 입력합니다.
  • labels=outer_labels: 각 조각에 표시될 라벨(국가명)을 설정합니다.
  • radius=1.3: 바깥쪽 도넛의 반지름을 설정합니다.
  • colors=outer_colors: 바깥쪽 도넛의 색상을 설정합니다.
  • wedgeprops=dict(width=0.3): 도넛 형태를 만들기 위해 각 조각의 너비를 설정합니다.
  • labeldistance=1.1: 라벨(국가명)을 도넛 바깥쪽으로 조금 더 이동시킵니다.
  • autopct='%1.1f%%': 각 조각의 비율을 소수점 한 자리로 표시합니다.
  • pctdistance=0.85: 비율 텍스트를 도넛 조각의 내부에 가깝게 배치합니다.
# 안쪽 도넛 레이어  
ax.pie(inner_sizes, labels=inner_labels, radius=1.0, colors=inner_colors,  
       wedgeprops=dict(width=0.3), labeldistance=0.7, autopct='%1.1f%%', pctdistance=0.6)  
  1. 안쪽 도넛 생성
  • inner_sizes: 내부 도넛의 비율을 입력합니다.
  • labels=inner_labels: 각 조각에 표시될 라벨을 설정합니다.
  • radius=1.0: 안쪽 도넛의 반지름을 설정합니다.
  • colors=inner_colors: 내부 도넛의 색상을 설정합니다.
  • wedgeprops=dict(width=0.3): 도넛 형태를 만듭니다.
  • labeldistance=0.7: 라벨(문자열)을 조각 내부에 가깝게 배치합니다.
  • autopct='%1.1f%%': 비율을 소수점 한 자리로 표시합니다.
  • pctdistance=0.6: 비율 텍스트를 더 내부로 이동시킵니다.
# 가운데 비우기 (도넛 형태 완성)  
centre_circle = plt.Circle((0, 0), 0.6, fc='white')  
fig.gca().add_artist(centre_circle)  
  1. 가운데 비우기
  • plt.Circle((0, 0), 0.6, fc='white'): 중심에 흰색 원을 추가해 도넛 형태를 완성합니다.
  • add_artist(centre_circle): 흰색 원을 차트에 추가합니다.
  • (0, 0): 중심 좌표입니다.
  • 0.6: 흰색 원의 반지름입니다.
# 타이틀 설정 (pad 옵션으로 간격 조정)  
plt.title('Improved Nested Donut Chart with Adjusted Labels', pad=30)  
  1. 타이틀 설정 및 간격 조정
  • plt.title(): 차트 상단에 제목을 추가합니다.
  • pad=30: 타이틀과 차트 사이의 간격을 30 픽셀로 조정합니다.
  • "Improved Nested Donut Chart with Adjusted Labels": 차트 제목입니다.
# 레이아웃 설정  
plt.tight_layout()  
  1. 레이아웃 최적화
    • plt.tight_layout(): 차트 요소들이 서로 겹치지 않도록 자동으로 여백을 조정합니다.
plt.show()
  1. 결과 출력
    • 차트를 화면에 표시합니다.

유사한 게시물