상세 컨텐츠

본문 제목

[Python](matplotlib) 파이 차트 그리기

파이썬 배우기 - (ver.1)/시각화 기초

by 콩알맹이 2024. 2. 26. 14:25

본문

앞의 글에서는 막대 그래프를 그리는 방법에 대해 알아봤다.

이번에는 .pie() 메소드를 이용하여 파이 차트를 그릴 것이다.

 

 

1. 라이브러리 불러오기

 

시각화를 하는데 필요한 matplotlib 라이브러리, pyplot 모듈, 그리고 DataFrame을 다루는데 필요한 pandas 라이브러리를 다음과 같이 불러온다.

import matplotlib as mpl
import matplotlib.pyplot as plt
import pandas as pd

 

 

2. 데이터 불러오기

 

이번에도 지난번과 같이 .groypby() 메소드의 예제에 사용했던 자료, Ham_df를 불러와 이용할 것이다.

 

링크 : https://kongalmengi.tistory.com/22

 

[Python](Pandas) .groupby() 메소드

이번에는 Pandas 라이브러리에서 제공되는 .groupby() 메소드에 대해 알아볼 것이다. groupby() 메소드는 DataFrame을 특정 열을 기준으로 그룹화 하는데 사용된다. 이렇게 그룹화된 데이터에 집계함수(agg

kongalmengi.tistory.com

 

Ham_df를 불러오자.

Ham_df

 

여기서 햄스터들이 모은 아몬드의 수를 '분류'Column 기준으로 다음과 같이 .groupby()메소드를 적용 해보자.

Ham_df.groupby('분류')['아몬드'].sum()

분류
오른 볼 잡이    28
왼 볼 잡이      6
Name: 아몬드, dtype: int64

 

.groupby()를 이용하여 위와 같은 Series를 얻었다.

 

 

3. 시각화

I. 막대 그래프

파이 차트를 그리기 전에 복습도 해볼 겸, 위의 결과를 이용하여 막대 그래프를 하나 그려보자.

위에서 얻은 Series의 index를 x축, 그리고 value를 y축으로 설정한 막대 그래프를 그릴 것이다.

이를 위해 .index와 .values를 이용하면 다음과 같은 코드를 구성하여 시각화 그래프를 만들 수 있다. 

# 데이터 설정
x_values = Ham_df.groupby('분류')['아몬드'].sum().index
y_values = Ham_df.groupby('분류')['아몬드'].sum().values

# 시각화
fig, ax = plt.subplots()

ax.set_title('아몬드 수집량 종합')
ax.bar(x_values, y_values, width=0.7, label='아몬드')
ax.set_xticks(range(len(x_values)), x_values)

plt.show()

 

'오른 볼 잡이'와 '왼 볼 잡이'로 구분된 막대 그래프를 얻었다.

두 개의 그룹으로 그룹화한 자료로써 충분히 의미있는 그래프다.

 

그런데 단순히 수치뿐만 아니라, 전체에서 두 그룹이 서로 차지하는 비율을 조금 더 직관적으로 확인하고 싶을 때가 있다.

이럴때는 파이 차트를 사용하면, 두 그룹이 서로 차지하는 비율을 조금 더 직관적으로 알 수 있다.

 

 

II. 파이 차트 그리기

그럼 이제 파이 차트를 그려보자.

파이 차트를 그리기 위해서는 .pie()메소드가 필요한데, 해당 메소드의 기본적인 사용법은 다음과 같다.

 

- .pie() 사용법 : .pie(y축 데이터)

 

.pie()의 사용법은 간단하다.

꼭 필요한 전달값은 위의 사용법에 명시한대로, y 데이터 뿐이다.

그럼 그룹별 아몬드 수집량의 합을 y축 데이터로 넣어주면 다음과 같이 코드를 구성하여 시각화를 할 수 있다.

# 데이터 설정
x_values = Ham_df.groupby('분류')['아몬드'].sum().index
y_values = Ham_df.groupby('분류')['아몬드'].sum().values

# 시각화
fig, ax = plt.subplots()

ax.set_title('아몬드 수집량 종합')
ax.pie(y_values)

plt.show()

 

기초적인 파이 차트를 만들었다.

하지만 많이 허전한 느낌이다.

무엇보다도 저 차트만으로 어떤 정보를 전달하기에는 많이 부족하다.

 

이러한 이유로 파이차트에는 부가적인 옵션을 사용하는 것이 필수적이다.

다행이도 .pie()에 여러 가지 파라미터를 이용하여 옵션을 전달할 수 있다.

그럼 파이 차트를 꾸미기 위해 필수적으로 필요한, .pie()의 파라미터를 하나씩 알아보자.

 

i) labels

막대 그래프나 꺾은선 그래프에서는 항상 x축 데이터를 전달해줘야 시각화를 할 수 있다.

파이 차트에서는 x축 데이터의 전달이 필수도 아니고, 함수 내에 해당 파라미터도 존재하지 않지만, 비슷한 역할을 labels 파라미터가 맡는다.

 

위의 .groupby()의 결과물에서 x축의 역할을 맡는 데이터는 바로 x_values.

이를 labels에 다음과 같이 전달할 수 있다.

fig, ax = plt.subplots()

ax.set_title('아몬드 수집량 종합')
ax.pie(y_values, labels=x_values) # labels 키워드값 설정

ax.legend(loc = 'upper left') # 범례 추가

plt.show()

 

labels 파라미터를 이용하니 시각화 자료의 의미를 이제야 명확하게 알 수 있게 되었다.

하지만 이것만으로는 여전히 부족하다.

이번에는 각 파이가 차지하는 비율도 수치로 나타내보자.

 

ii) autopct (퍼센테이지 표시 추가)

.pie()에 autopct 파라미터를 이용하면 각 파이가 차지하는 비율을 표시할 수 있다.

소수점 첫 째 자리까지 퍼센테이지를 표시해보자.

fig, ax = plt.subplots()

ax.set_title('아몬드 수집량 종합')
ax.pie(y_values, labels=x_values, autopct='%.1f%%') # autopct 키워드값 설정

ax.legend(loc = 'upper left')

plt.show()

 

autopct의 값을 설정해주니, 각각의 항목이 차지하는 비율이 퍼센테이지로 표시되었다.

 

iii) startangle

필수적인 요소는 아니지만, 파이 차트의 시작 위치를 설정해줄 수 있다.

startangle 파라미터를 이용하면 가능하다.

개인적으로 startangle은 90으로 설정할 때 가장 보기 좋은데, 여기서도 startangle=90으로 설정해보자.

fig, ax = plt.subplots()

ax.set_title('아몬드 수집량 종합')
ax.pie(y_values, labels=x_values, autopct='%.1f%%', startangle=90) # startangle=90으로 설정

ax.legend(loc = 'upper left')

plt.show()

 

파이의 시작 각도가 12시 방향으로 바뀐 것을 확인할 수 있다.

 

iv) explode

이것도 필수적인 요소는 아닌데, 파이의 특정 조각을 강조하기 위하여 특정 파이를 똑 떼서 보여줄 수 있다.

explode 파라미터를 이용하면 가능한데, 해당 파라미터의 전달값으로는 파이 항목과 같은 갯수의 list를 필요로 한다.

 

이번 예제를 예로 들자면, explode의 키워드값으로 [0, 0.3]을 입력하였을 때, '오른 볼 잡이'는 0만큼(떨어지지 않는다는 의미.), '왼 볼 잡이'는 0.3만큼 기존의 위치에서 멀어지는 것이다.

 

직접 확인해보자.

fig, ax = plt.subplots()

ax.set_title('아몬드 수집량 종합')
ax.pie(y_values, labels=x_values, autopct='%.1f%%', startangle=90, explode=[0, 0.3]) # explode 설정

ax.legend(loc = 'upper left')

plt.show()

 

정말로 '왼 볼 잡이' 항목이 떨어져나온 파이 차트를 확인 할 수 있다.

 

v) shadow

shadow 파라미터를 이용하면 파이 차트에 그림자 효과를 넣을 수 있다.

전달값으로는 불리언(True, False)을 이용하는데, True를 입력할 때 그림자 효과가 적용되는 것이다.

한 번 그림자 효과를 넣어보자.

fig, ax = plt.subplots()

ax.set_title('아몬드 수집량 종합')
# shadow 설정 추가
ax.pie(y_values, labels=x_values, autopct='%.1f%%', startangle=90, explode=[0, 0.3], shadow=True)

ax.legend(loc = 'upper left')

plt.show()

 

파이 차트에 그림자 효과가 추가된 것을 확인할 수 있다.

그리고 이것으로 그럴 듯 한 시각화 차트가 완성되었다.

 

그럼 지금까지 했던 것을 이용하여 '땅콩 수집량 종합'에 대한 파이 차트를 또 그려보자.

 

vi) '땅콩 수집량 종합' 파이 차트

차트에 사용할 데이터만 땅콩에 대한 데이터로 바꿔주면 땅콩 수집량을 종합한 차트를 만들 수 있다.

# 데이터 설정
x_values_a = Ham_df.groupby('분류')['땅콩'].sum().index
y_values_a = Ham_df.groupby('분류')['땅콩'].sum().values

# 시각화
fig, ax = plt.subplots()

ax.set_title('땅콩 수집량 총합')
ax.pie(y_values_a, labels=x_values_a, autopct='%.1f%%', startangle=90, explode=[0, 0.3], shadow=True)

ax.legend(loc='upper right')

plt.show()

 

 

지금까지 시각화 메소드 .pie()를 이용하여 파이 차트를 그리는 방법에 대해 알아봤다.

다음 글 에서는 .scatter()를 이용하여 산점도를 그리는 방법을 알아보자.

관련글 더보기