달나라 노트

Python matplotlib : pie (matplotlib로 pie 차트 그리기, pie chart, matplotlib pie chart) 본문

Python/Python matplotlib

Python matplotlib : pie (matplotlib로 pie 차트 그리기, pie chart, matplotlib pie chart)

CosmosProject 2022. 1. 17. 22:46
728x90
반응형

 

 

 

matplotlib에서는 원형 그래프인 pie chart를 그리는 기능도 제공합니다.

 

 

 

 

import matplotlib.pyplot as plt

labels = ['Cake', 'Chocolate', 'Candy', 'Macaroon', 'Waffle']
values = [20, 35, 10, 50, 20]

plt.pie(values, labels=labels)
plt.show()

사용법은 굉장히 간단합니다.

value를 list에 담고 각 value들에 대한 수치(label)를 list에 담아서 pie method에 전달해주면 됩니다.

 

 

 

 

 

 

 

 

 

 

 

 

import matplotlib.pyplot as plt

labels = ['Cake', 'Chocolate', 'Candy', 'Macaroon', 'Waffle']
values = [20, 35, 10, 50, 20]

plt.pie(values, labels=labels, explode=[0, 0.1, 0.2, 0.3, 0.4])
plt.show()

explode 옵션은 각각의 부채꼴 차트가 중심으로부터 얼마나 멀어져있도록 그릴지 결정합니다.

 

explode 옵션은 list의 형태로 전달되어야 하며 모든 부채꼴에 대해 각각의 부채꼴이 중심으로 멀어져있는 수치를 모두 제시해야 합니다.

즉, 위 그래프는 총 5개의 부채꼴이 있는데 explode 옵션을 전달할 때 길이가 3인 list를 explode에 전달하면 error를 발생시킵니다.

왜냐면 5개중 3개의 그래프에 대한 explode 값만 정해져있기 때문이죠.

 

explode 옵션에 전달된 list는 label, value와 동일한 순서를 공유합니다.

그래서 위 이미지를 보면 explode가 0으로 설정된 Cake는 부채꼴이 원 중심에 붙어있고

Chocolate -> Candy -> Macaroon -> Waffle로 갈 수록 0.1, 0.2, 0.3, 0.4에 대응해서 결국 점점 중심으로부터 더 멀어진 채로 그려지게 됩니다.

 

 

 

 

 

 

 

 

 

 

 

 

import matplotlib.pyplot as plt

labels = ['Cake', 'Chocolate', 'Candy', 'Macaroon', 'Waffle']
values = [20, 35, 10, 50, 20]

plt.pie(values, labels=labels, autopct='%.1f')
plt.show()

autopct 옵션은 value들을 각각의 부채꼴에 어떤 형식으로 출력할 것을 의미합니다.

 

autopct='%.1f'

위 예시에서 autopct는 위처럼 패턴으로 적었습니다.

%는 숫자를 의미합니다.

.1f는 소수점 첫 번째 자리를 의미합니다.

즉, 숫자를 소수점 첫 번째 자리까지 나타내라는 의미이죠.

 

 

 

import matplotlib.pyplot as plt

labels = ['Cake', 'Chocolate', 'Candy', 'Macaroon', 'Waffle']
values = [20, 35, 10, 50, 20]

plt.pie(values, labels=labels, autopct='%.2f')
plt.show()

이런식으로 소수점 몇 번째 자리까지 표시할지 정할 수 있습니다.

 

 

 

 

import matplotlib.pyplot as plt

labels = ['Cake', 'Chocolate', 'Candy', 'Macaroon', 'Waffle']
values = [20, 35, 10, 50, 20]

plt.pie(values, labels=labels, autopct='%.1f%%')
plt.show()

 

맨 뒤에 %%를 2개 붙여주면 이것은 더 이상 숫자를 의미하는 특수기호가 아니라 %라는 텍스트 자체를 의미합니다.

따라서 부채꼴에 표시되는 숫자에 %가 붙은걸 볼 수 있죠.

 

 

 

 

 

import matplotlib.pyplot as plt

labels = ['Cake', 'Chocolate', 'Candy', 'Macaroon', 'Waffle']
values = [20, 35, 10, 50, 20]

plt.pie(values, labels=labels, autopct=lambda x: str(round(x, 1)) + '%')
plt.show()

autopct에는 lambda 식도 전달할 수 있습니다.

lambda식에서 x는 각 label 하나하나를 의미합니다.

 

 

 

import matplotlib.pyplot as plt

labels = ['Cake', 'Chocolate', 'Candy', 'Macaroon', 'Waffle']
values = [20, 35, 10, 50, 20]

plt.pie(values, labels=labels, counterclock=True)
plt.show()

지금까지의 예시를 보면 labels에 전달된 list에 존재하는 요소들을 순차적으로 반시계방향으로 나타냈다는 것을 볼 수 있습니다.

Cake로부터 반시계 방향으로 바로 옆에는 Chocolate이 있고,

Chocolate부터 반시계 방향으로 바로 옆에는 Candy가 있는 방식이죠.

 

그 이유는 counterclock 옵션이 True로 설정되어있었기 때문입니다.

 

 

 

 

 

 

import matplotlib.pyplot as plt

labels = ['Cake', 'Chocolate', 'Candy', 'Macaroon', 'Waffle']
values = [20, 35, 10, 50, 20]

plt.pie(values, labels=labels, counterclock=False)
plt.show()

counterclock 옵션을 False로 두면 그래프가 시계방향으로 그려지는 것을 알 수 있습니다.

Cake로부터 시계 방향으로 바로 옆에는 Chocolate이 있고,

Chocolate부터 시계 방향으로 바로 옆에는 Candy가 있는 방식이죠.

 

 

 

 

 

import matplotlib.pyplot as plt

labels = ['Cake', 'Chocolate', 'Candy', 'Macaroon', 'Waffle']
values = [20, 35, 10, 50, 20]

plt.pie(values, labels=labels, startangle=45)
plt.show()

pie method는 기본적으로 오른쪽 3시방향 (좌표로 얘기하자면 양수 x축)부터 시작해서 반시계방향/시계방향으로 부채꼴을 그립니다.

그러나 startangle을 정해주면 3시 방향을 기준으로 몇 도 만큼 반시계방향으로 회전해서 그래프의 시작점을 설정할지를 결정할 수 있습니다.

 

위 예시는 startangle = 45로 지정했으므로

가장 첫 그래프인 Cake가 3시방향으로부터 45도 반시계방향으로 올라간 지점에서부터 시작되는 것을 볼 수 있습니다.

 

 

 

 

import matplotlib.pyplot as plt

labels = ['Cake', 'Chocolate', 'Candy', 'Macaroon', 'Waffle']
values = [20, 35, 10, 50, 20]

plt.pie(values, labels=labels, colors=['skyblue', 'pink', 'grey', 'lightgreen', 'yellow'])
plt.show()

color 옵션을 이용하면 각 부채꼴의 색상을 정할 수 있습니다.

 

여기서 주의할 점은 color옵션은 list의 형태로 전달되어야하며

color 옵션에 전달할 list는 모든 부채꼴의 색상을 담고있어야 합니다.

즉, 부채꼴이 총 5개가 있다면 color 옵션에 전달될 list에도 5개의 색상이 있어야한다는 의미이죠.

 

 

 

 

 

import matplotlib.pyplot as plt

labels = ['Cake', 'Chocolate', 'Candy', 'Macaroon', 'Waffle']
values = [20, 35, 10, 50, 20]

plt.pie(values, labels=labels, shadow=True)
plt.show()

shadow 옵션을 True로 설정하면 pie chart에 그림자를 보이게 할 수 있습니다.

 

 

 

 

 

 

 

import matplotlib.pyplot as plt

labels = ['Cake', 'Chocolate', 'Candy', 'Macaroon', 'Waffle']
values = [20, 35, 10, 50, 20]

wedgeprops = {
    'edgecolor': 'black',
    'linestyle': '-',
    'linewidth': 1.5
}
plt.pie(values, labels=labels, wedgeprops=wedgeprops)
plt.show()

wedgeprops 옵션을 사용하면 각각의 부채꼴에 대한 테두리를 설정할 수 있습니다.

 

주의할점은 wedgeprops에는 dictionary 데이터가 들어가야 합니다.

wedgeprops = {
    'edgecolor': 'black',
    'linestyle': '-',
    'linewidth': 1.5
}

위 예시에서 wedgeprops에 전달된 dictionary를 살펴보면 위와 같습니다.

 

대충 감은 오시겠지만 각각이 의미하는 바는 다음과 같습니다.

edgecolor -> 테두리의 색상

linestyle -> 테두리의 style (-는 실선을 의미하고 --는 점선을 의미합니다.)

linewidth -> 테두리의 두께

 

 

 

 

 

import matplotlib.pyplot as plt

labels = ['Cake', 'Chocolate', 'Candy', 'Macaroon', 'Waffle']
values = [20, 35, 10, 50, 20]

wedgeprops = {
    'edgecolor': 'black',
    'linestyle': '--',
    'linewidth': 1.5
}
plt.pie(values, labels=labels, wedgeprops=wedgeprops)
plt.show()

테두리를 점선으로 설정했을 때의 결과입니다.

 

 

 

 

 

 

728x90
반응형
Comments