목차
데이터들의 크기를 시각적으로 표현하기에 적절한 시각화 중 하나는 파이차트를 이용하는 것입니다. 파이썬의 matplotlib은 이러한 파이차트를 그리기 위해 pie() 함수를 사용하는데, pie() 함수가 갖고 있는 인자들과 사용법에 대해 알아보겠습니다.
1. 파이차트는 왜 사용하는가?
Pie chart는 데이터를 시각적으로 표현하기 위해 사용되는 통계적 도구입니다. Pie chart는 데이터의 구성 요소와 상대적인 비율을 강조하기 위해 사용되지만, 데이터의 정확한 값을 비교하는 데는 적합하지 않을 수 있습니다. 데이터의 세부 정보를 보다 정확하게 분석하려면 다른 시각화 도구나 그래프를 활용하는 것이 좋습니다. 일반적으로 다음과 같은 경우에 주로 사용됩니다
상대적인 비율 표현
Pie chart는 전체 집합 내에서 각 부분의 상대적인 비율을 보여줄 수 있습니다. 예를 들어, 판매 부문별로 전체 매출액의 비율을 비교하거나 인구 통계학적 데이터에서 각 연령 그룹의 비율을 표현하는 데 사용될 수 있습니다.
부분과 전체 간 관계 시각화
Pie chart는 전체와 그 부분 간의 관계를 시각화하는 데 유용합니다. 예를 들어, 회사의 전체 예산에 대한 각 부서의 예산 할당 비율을 보여줄 때 사용할 수 있습니다.
범주 간 비교
Pie chart는 서로 다른 범주 간의 비교를 도와줍니다. 예를 들어, 다른 지역 간의 인기 있는 여행지 비교, 다른 운동 종목의 인기 비교 등에 사용될 수 있습니다.
데이터의 상대적 크기 시각화
Pie chart는 데이터 요소의 상대적 크기를 시각적으로 표현하는 데 효과적입니다. 예를 들어, 시장 점유율을 보여줄 때 사용하면 어떤 기업이 시장에서 더 큰 점유율을 가지는지 쉽게 확인할 수 있습니다.
2. pie() 함수 형태
matplotlib 라이브러리 설명에 나와있는 기본 사용의 정의는 다음과 같습니다.
matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None,
autopct=None, shadow=False, startangle=0, pctdistance=0.6,
labeldistance=1.1, radius=1.0, counterclock=True,
wedgeprops=None, textprops=None, center=(0, 0),
frame=False, rotatelabels=False, *, normalize=None, data=None)
상당히 많은 인자들을 포함하고 있습니다. 각 인자들에 대한 설명은 아래와 같이 정리하였습니다.
x: 필수 인자로, 파이 차트를 생성하기 위한 데이터입니다. 각 데이터 항목의 크기가 나타내는 비율에 따라 조각의 크기가 결정됩니다.
explode: 선택적 인자로, 파이 차트에서 특정 조각을 돋보이게 하기 위해 조각들을 떼어내는 정도를 지정하는 배열입니다. 기본값은 None이며, 모든 조각이 동일한 크기로 표시됩니다.
labels: 선택적 인자로, 각 조각에 대한 레이블을 지정하는 배열입니다. 기본값은 None이며, 레이블이 표시되지 않습니다.
colors: 선택적 인자로, 조각들에 사용할 색상을 지정하는 배열입니다. 기본값은 None이며, matplotlib의 기본 색상 순서가 사용됩니다.
autopct: 선택적 인자로, 조각의 퍼센트 값을 표시하는 서식 문자열이나 함수입니다. 기본값은 None이며, 퍼센트 값이 표시되지 않습니다.
shadow: 선택적 인자로, 그림자를 생성할지 여부를 지정하는 부울 값입니다. 기본값은 False입니다.
startangle: 선택적 인자로, 파이 차트의 시작 각도를 지정하는 부동 소수점 숫자입니다. 기본값은 0이며, 시계 방향으로 회전합니다.
pctdistance: 선택적 인자로, 퍼센트 값 텍스트와 중심 사이의 비율을 지정하는 부동 소수점 숫자입니다. 기본값은 0.6입니다.
labeldistance: 선택적 인자로, 레이블과 중심 사이의 비율을 지정하는 부동 소수점 숫자입니다. 기본값은 1.1입니다.
radius: 선택적 인자로, 파이 차트의 반지름을 지정하는 부동 소수점 숫자입니다. 기본값은 1.0입니다.
counterclock: 선택적 인자로, 파이 차트를 그릴 때 시계 방향 또는 반시계 방향으로 그릴 지를 지정하는 부울 값입니다. 기본값은 True입니다.
wedgeprops: 선택적 인자로, 조각들의 속성을 지정하는 딕셔너리입니다. 기본값은 None이며, 조각의 속성은 변경되지 않습니다.
textprops: 선택적 인자로, 텍스트 속성을 지정하는 딕셔너리입니다. 기본값은 None이며, 텍스트 속성은 변경되지 않습니다.
center: 선택적 인자로, 파이 차트의 중심 위치를 지정하는 튜플입니다. 기본값은 (0, 0)입니다.
frame: 선택적 인자로, 파이 차트 주위에 프레임을 그릴지 여부를 지정하는 부울 값입니다. 기본값은 False입니다.
rotatelabels: 선택적 인자로, 레이블을 회전시킬지 여부를 지정하는 부울 값입니다. 기본값은 False입니다.
normalize: 선택적 인자로, x 데이터를 정규화할지 여부를 지정하는 부울 값입니다. 기본값은 None이며, 데이터가 정규화되지 않습니다.
data: 선택적 인자로, 데이터를 pandas DataFrame이나 배열 형태로 전달하는 데 사용됩니다. 기본값은 None이며, x 인자를 사용하여 데이터를 전달하는 방식을 사용합니다.
3. 각 인자별 적용 결과 #1
모든 인자에 대해 예제를 보여드리기는 힘들고 몇몇 인자에 대해 예제코드를 활용하여 인자별 어떠한 변화가 있는지 확인해 보도록 하겠습니다. 아래는 subplot을 사용하여 3x2 형태의 서브플롯으로 다른 인자에 대한 적용을 비교 그래프로 그리는 예시 코드입니다. 다음 인자들을 비교합니다: explode, colors, shadow, autopct, startangle, pctdistance
import matplotlib.pyplot as plt
# 데이터 예시
data = [40, 30, 20, 10]
# 그래프 크기와 서브플롯 설정
fig, axs = plt.subplots(3, 2, figsize=(10, 10))
# 첫 번째 서브플롯: explode 인자 적용
axs[0, 0].pie(data, explode=[0, 0.1, 0, 0], labels=['A', 'B', 'C', 'D'], autopct='%1.1f%%', startangle=90)
axs[0, 0].set_title('Explode')
# 두 번째 서브플롯: colors 인자 적용
axs[0, 1].pie(data, labels=['A', 'B', 'C', 'D'], autopct='%1.1f%%', colors=['#ff9999', '#66b3ff', '#99ff99', '#c2c2f0'])
axs[0, 1].set_title('Colors')
# 세 번째 서브플롯: shadow 인자 적용
axs[1, 0].pie(data, labels=['A', 'B', 'C', 'D'], autopct='%1.1f%%', shadow=True)
axs[1, 0].set_title('Shadow')
# 네 번째 서브플롯: autopct 인자 적용
axs[1, 1].pie(data, labels=['A', 'B', 'C', 'D'], autopct='%1.1f%%')
axs[1, 1].set_title('Autopct')
# 다섯 번째 서브플롯: startangle 인자 적용
axs[2, 0].pie(data, labels=['A', 'B', 'C', 'D'], autopct='%1.1f%%', startangle=45)
axs[2, 0].set_title('Startangle')
# 여섯 번째 서브플롯: pctdistance 인자 적용
axs[2, 1].pie(data, labels=['A', 'B', 'C', 'D'], autopct='%1.1f%%', pctdistance=0.8)
axs[2, 1].set_title('Pctdistance')
# 서브플롯 간 간격 조정
plt.tight_layout()
# 그래프 출력
plt.show()
4. 각 인자별 적용 효과 #2
위에서 사용한 인자 이외의 다른 인자에 대해서도 어떠한 결과가 나오는지 확인해 보도록 하겠습니다. 다음 인자들을 비교합니다: radius, wedgeprops, textprops, center
각 인자들이 의미하는 내용은 아래와 같이 다시 한번 정리해 보았습니다.
radius (default: 1)
파이 차트의 반지름을 설정합니다.
값이 1보다 작으면 차트가 더 작아지고, 값이 1보다 크면 차트가 더 커집니다.
wedgeprops (default: None)
각 조각의 속성을 설정합니다.
주로 조각의 테두리 색상(edgecolor)과 테두리 두께(linewidth)를 지정하는 데 사용됩니다.
textprops (default: None)
조각의 레이블 텍스트 속성을 설정합니다.
주로 폰트 크기(fontsize), 폰트 색상(color), 글꼴 스타일(style) 등을 지정하는 데 사용됩니다.
center (default: (0, 0))
파이 차트가 그려지는 중심 위치를 설정합니다.
(x, y) 형태의 튜플로 지정하며, (0, 0)은 그래프의 중앙을 의미합니다.
import matplotlib.pyplot as plt
# 데이터 예시
data = [40, 30, 20, 10]
# 그래프 크기와 서브플롯 설정
fig, axs = plt.subplots(3, 2, figsize=(10, 10))
# 첫 번째 서브플롯: radius 인자 적용
axs[0, 0].pie(data, labels=['A', 'B', 'C', 'D'], autopct='%1.1f%%', startangle=90, radius=0.8)
axs[0, 0].set_title('Radius')
# 두 번째 서브플롯: wedgeprops 인자 적용
wedgeprops = {'edgecolor': 'black', 'linewidth': 1}
axs[0, 1].pie(data, labels=['A', 'B', 'C', 'D'], autopct='%1.1f%%', wedgeprops=wedgeprops)
axs[0, 1].set_title('Wedgeprops')
# 세 번째 서브플롯: textprops 인자 적용
textprops = {'fontsize': 12, 'color': 'white'}
axs[1, 0].pie(data, labels=['A', 'B', 'C', 'D'], autopct='%1.1f%%', textprops=textprops)
axs[1, 0].set_title('Textprops')
# 네 번째 서브플롯: center 인자 적용
axs[1, 1].pie(data, labels=['A', 'B', 'C', 'D'], autopct='%1.1f%%', center=(0.5, 0.5))
axs[1, 1].set_title('Center')
# 다섯 번째 서브플롯: 추가 인자를 사용하지 않음
axs[2, 0].pie(data, labels=['A', 'B', 'C', 'D'], autopct='%1.1f%%')
axs[2, 0].set_title('No Additional Arguments')
# 빈 서브플롯
axs[2, 1].axis('off')
# 서브플롯 간 간격 조정
plt.tight_layout()
# 그래프 출력
plt.show()
5. 마치며
데이터의 상대 비교를 위해 사용되는 파이차트를 그려주는 pie() 함수의 사용법에 대해 알아보았습니다. 파이썬 관련 함수 사용 매뉴얼들을 보면 인자들에 대한 설명이 글로만 되어 있어 실제 적용 시에 어떤 효과가 있는지 한눈에 확인하기 어려웠습니다. 이번 포스팅에서는 각 인자들을 사용할 때 결과가 어떻게 달라지는지 확인까지 해 보았습니다.