파이썬/시각화 matplot

데이터의 비율을 표현하는 파이차트 pie

Merware 2023. 5. 16. 15:20

[학습목표]
파이차트를 이용하여 데이터의 상대적 비율을 표현할 수 있다.

import matplotlib.pyplot as plt
# 그래프에 한글 설정
plt.rcParams['font.family'] = 'Malgun Gothic'

# 그래프에 마이너스 기호 깨지는 문제 해결
plt.rcParams['axes.unicode_minus'] = False

파이차트

  • 전체에 대한 각 부분의 비율을 부채꼴 모양으로 나타낸 그래프이다.
  • 각 부채꼴의 중심각이 전체에서 해당 데이터가 차지하는 비율을 나타낸다.
  • 1차원 리스트/배열/시리즈를 이용하여 그린다.

샘플데이터

# 2019년 병역판정검사 - 혈액형 분포
blood_type = ['A','B','O','AB']
Personnel = [111901,87066,86804,36495]

기본 파이그래프 그리기

  • plt.pie(data)
plt.pie(Personnel)
plt.show()

레이블 달기

  • labels=label목록
  • labeldistance = 그래프로부터 레이블을 얼만큼 떨어뜨려서 표시할것인가 (default:1.1)
plt.pie(Personnel, labels=blood_type, labeldistance = 1.2)
plt.show()

비율 표시하기

  • autopct = '%소수점자리수%%'
  • pctdistance = 중심에서의 거리(반지름을 1이라고 했을 때 반지름으로부터 얼만큼 떨어져서 비율을 표시할 것인지.., default:0.6)
plt.pie(Personnel, labels=blood_type, labeldistance = 1.2, autopct ='%.1f%%', pctdistance=0.6)
plt.show()

 

돌출효과

  • explode=돌출정도리스트
  • 반지름의 길이를 1이라고 했을 때를 기준으로 하여 돌출 정도를 지정
plt.pie(Personnel, labels=blood_type, labeldistance = 1.2, autopct ='%.1f%%', pctdistance=0.6
       , explode=[0.1,0,0,0])
plt.show()

 

색상 바꾸기

  • colors = 색상리스트
    ['lightcoral', 'gold', 'greenyellow', 'skyblue']
plt.pie(Personnel, labels=blood_type, labeldistance = 1.2, autopct ='%.1f%%', pctdistance=0.6
       , explode=[0.1,0,0,0]
       , colors =['lightcoral', 'gold', 'greenyellow', 'skyblue'])
plt.show()

 

시작각도

  • startangle = 시작각도
  • 기본시작각도는 3시방향
  • 시작각도를 지정하면 3시방향으로부터 반 시계방향으로 각도만큼 이동하여 시작
plt.pie(Personnel, labels=blood_type, labeldistance = 1.2, autopct ='%.1f%%', pctdistance=0.6
       , explode=[0.1,0,0,0]
       , colors =['lightcoral', 'gold', 'greenyellow', 'skyblue']
       , startangle=90)
plt.show()

 

회전방향

  • counterclock=True/False (반시계/시계)
plt.pie(Personnel, labels=blood_type, labeldistance = 1.2, autopct ='%.1f%%', pctdistance=0.6
       , explode=[0.1,0,0,0]
       , colors =['lightcoral', 'gold', 'greenyellow', 'skyblue']
       , startangle=90
       , counterclock = False)
plt.show()

 

범례

  • legend(레이블리스트)
plt.pie(Personnel, labels=blood_type, labeldistance = 1.2, autopct ='%.1f%%', pctdistance=0.6
       , explode=[0.1,0,0,0]
       , colors =['lightcoral', 'gold', 'greenyellow', 'skyblue']
       , startangle=90
       , counterclock = False)
plt.legend(loc=(1,0.5))
plt.show()

 

반지름

  • radius=반지름(Default:1)
plt.pie(Personnel, labels=blood_type, labeldistance = 1.2, autopct ='%.1f%%', pctdistance=0.6
       , explode=[0.1,0,0,0]
       , colors =['lightcoral', 'gold', 'greenyellow', 'skyblue']
       , startangle=90
       , counterclock = False
       , radius=1)
plt.show()

 

부채꼴 스타일

  • wedgeprops = {'ec':테두리컬러, 'lw':선두께, 'ls':선스타일, 'width':반지름에대한비율}
plt.pie(Personnel, labels=blood_type, labeldistance = 1.2, autopct ='%.1f%%', pctdistance=0.6
       , explode=[0.1,0,0,0]
       , colors =['lightcoral', 'gold', 'greenyellow', 'skyblue']
       , startangle=90
       , counterclock = False
       , radius=1
       , wedgeprops = {'ec':'k', 'lw':1,'ls':':' ,'width':0.7})
plt.show()

 

폰트

  • textprops = {'fontsize':폰트사이즈, 'color':폰트컬러, 'rotation':폰트회전각도}
plt.pie(Personnel, labels=blood_type, labeldistance = 1.2, autopct ='%.1f%%', pctdistance=0.6
       , explode=[0.1,0,0,0]
       , colors =['lightcoral', 'gold', 'greenyellow', 'skyblue']
       , startangle=90
       , counterclock = False
       , radius=1
       , wedgeprops = {'ec':'k', 'lw':1,'ls':':' ,'width':0.7}
       , textprops = {'fontsize':12, 'color':'b', 'rotation':0})

plt.show()

 

그래프 완성

plt.figure(figsize=(5,5), facecolor='ivory', edgecolor='gray', linewidth=2)
plt.pie(Personnel, labels=blood_type, labeldistance = 1.2, autopct ='%.1f%%', pctdistance=0.6
       , explode=[0.1,0,0,0]
       , colors =['lightcoral', 'gold', 'greenyellow', 'skyblue']
       , startangle=90
       , counterclock = False
       , radius=1
       , wedgeprops = {'ec':'k', 'lw':1,'ls':':' ,'width':0.7}
       , textprops = {'fontsize':12, 'color':'b', 'rotation':0})

plt.title('2019년 병역판정검사 - 혈액형 분포', size=15)
plt.show()