[AITech] 20220211 - Pie Chart
학습 내용
Pie Chart&Bar Chart
Pie Chart
는 원을 부채꼴로 분할하여 표현하는 통계 차트로, 전체를 백분위로 나타낼 때 유용합니다.
많이 사용되는 차트지만, 비슷한 값끼리는 세세한 비교가 어렵기 때문에 bar plot을 사용하는 것이 더 나을 수 있습니다.
Basic Pie Chart
pie()
labels = ['A', 'B', 'C', 'D']
data = np.array([60, 90, 45, 165]) # total 360
fig, ax = plt.subplots(1, 1, figsize=(7, 7))
ax.pie(data,
labels=labels
)
plt.show()
Pie Chart VS Bar Plot
같은 데이터로 Pie chart와 Bar Chart를 비교하며 장단점을 비교하면 다음과 같습니다.
- 장점 : 비율 정보에 대한 정보를 제공할 수 있다.
- 단점 : 구체적인 양의 비교가 어렵다.
실제로 다음과 같이 비슷한 값들에 대해서는 비교가 어렵습니다.
np.random.seed(97)
data = np.array([16, 18, 20, 22, 24])
labels = list('ABCDE')
color = plt.cm.get_cmap('tab10').colors[:5]
fig, axes = plt.subplots(2, 3, figsize=(15, 10))
for i in range(3):
axes[0][i].pie(data, labels=labels)
axes[1][i].bar(labels, data, color=color)
np.random.shuffle(data)
plt.show()
Pie Chart Custom
startangle
: 시작 각도를 조정합니다.explode
: data의 길이만큼의 list를 전달합니다. 양수 값을 전달하면 해당 부분이 원에서 그만큼 떨어져 나옵니다.shadow
: 차트에 음영을 추가합니다.autopct
: 차트에 값을 표시합니다.labeldistance
: label을 표시하는 거리를 조정합니다.rotatelabels
: label의 각도를 조정합니다.counterclock
: False로 지정하면 시계 방향으로 data를 나타냅니다.radius
: 차트의 반지름 크기를 지정합니다.
labels = ['A', 'B', 'C', 'D']
data = np.array([60, 90, 45, 165]) # total 360
fig, ax = plt.subplots(1, 1, figsize=(7,7))
ax.pie(data,
labels=labels,
startangle=90,
explode=[0, 0, 0.2, 0],
shadow=True,
autopct='%1.1f%%',
labeldistance=1.15,
rotatelabels=90,
counterclock=False,
radius=1
)
plt.show()
Pie Chart 변형
Donut Chart
중간에 원을 그리는 방식으로 그려집니다.
fig, ax = plt.subplots(1, 1, figsize=(7, 7))
ax.pie(data, labels=labels, startangle=90,
shadow=True, autopct='%1.1f%%')
# 좌표 0, 0, r=0.7, facecolor='white'
centre_circle = plt.Circle((0,0),0.70,fc='white')
ax.add_artist(centre_circle)
plt.show()
다음 두 파라미터로 커스텀할 수 있습니다.
pctdistance
textprops
fig, ax = plt.subplots(1, 1, figsize=(7, 7))
ax.pie(data, labels=labels, startangle=90,
shadow=True, autopct='%1.1f%%', pctdistance=0.85, textprops={'color':"w"})
# 좌표 0, 0, r=0.7, facecolor='white'
centre_circle = plt.Circle((0,0),0.70,fc='white')
ax.add_artist(centre_circle)
plt.show()
Leave a comment