Python matplotlib : pie (matplotlib로 pie 차트 그리기, pie chart, matplotlib pie chart)
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()
테두리를 점선으로 설정했을 때의 결과입니다.