일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 파이썬 3
- mrc
- 단계별문제풀이
- python3
- 프로그래머스
- 부스트캠프_AITech3기
- 이코테
- 그리디
- dfs
- 글또
- 다시보기
- 개인회고
- 알고리즘_스터디
- 기술면접
- Level2_PStage
- ODQA
- Level2
- 이진탐색
- 백준
- 정렬
- 그래프이론
- 알고리즘스터디
- dp
- 주간회고
- 구현
- 최단경로
- Level1
- U_stage
- 백트랙킹
- 부스트캠프_AITech_3기
- Today
- Total
국문과 유목민
Matplotlib [polar, pie] 사용법 본문
해당 일일리포트에서는 네이버 커넥트에서 진행하는 '부스트캠프 AI Tech 3기'에서 배운 내용을 다루고 있습니다. 저작권 이슈 때문에 관련 자료를 올릴 수는 없기에 핵심 이론과 코드를 요약해서 올리고 있기에 내용이 부족할 수 있습니다.
Matplotlib (polar, pie)
Polar Coordinate
극좌표계를 사용하는 시각, 거리(R), 각(Theta)를 사용한 plot이다. 회전이나 주기성 등을 표현하기에 적합, 극좌표계를 사용해 표현되는 그래프는 scatter이기 때문에 line, bar 등을 사용할 수 있다.
- Polar Coordinate 사용법
- projection='ploar', polar=True: 서브플롯을 만들 때 활용해 사용할 수 있다.
- set_rmax() / set_rmin(): 반지름 조정
- set_rticks(): 반지름 표기의 grid 조정
- set_rlabel_position(): 반지름 label이 적히는 위치의 각도 조정
- set_thetamax()/set_thetamin(): 각도의 min과 max 값 (360도 기준)
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111, polar=True)
ax.set_rmax(2)
ax.set_rmin(0) # 범위만 바뀐다.
ax.set_rticks([1, 1.5, 2])
# ax.set_rlabel_position(50) # label을 원하는 방식으로 적어줄 수 있다.
ax.set_thetamin(0)
ax.set_thetamax(270)
plt.show()
- Polar의 기본 차트
polar의 기본차트로는 Scatter, Bar, Plot이 있다. 여기서 Plot을 그렸을 때는 'ax.fill()'을 통해서 면적을 칠할 수 있다.
np.random.seed(19680801)
# scatter
N = 100
r = 2 * np.random.rand(N)
theta = 2 * np.pi * np.random.rand(N)
area = 200 * r**2
colors = theta
fig = plt.figure(figsize=(14, 14))
ax = fig.add_subplot(131, projection='polar')
c = ax.scatter(theta, r, c=colors, s=area, cmap='hsv', alpha=0.75)# 색은 c, s는 원의 크기, cmap= pallete
ax.set_title('scatter')
# bar
N = 6
r = np.random.rand(N)
theta = np.linspace(0, 2*np.pi, N, endpoint=False)
ax2 = fig.add_subplot(132, projection='polar')
ax2.bar(theta, r, width=0.5, alpha=0.5)
ax2.set_title('bar')
# plot
N = 1000
r = np.linspace(0, 1, N)
theta = np.linspace(0, 2*np.pi, N)
ax3 = fig.add_subplot(133, projection='polar')
ax3.fill(theta, r) # ax3.plot(theta, r)
ax3.set_title('plot(fill)')
plt.show()
- Radar Plot
극 좌표계에서 가장 대표적으로 사용하는 차트이다. 별 모양으로 생겨서 Star Plot이라고 불리기도 한다. 중심점을 기준으로 N개의 변수 값을 표현할 수 있다. 데이터의 Quality를 표현하기에 좋다. (캐릭터의 강함, 운동선수 분석, 성능 비교)
자주 사용하는 만큼 주의해야할 점도 있다.
- 각 feature는 독립적이며, 척도가 같아야 한다. 순서형 변수와 수치형 변수가 함께 있다면 고려가 필요하다. 소비자 만족도는 범주형이지만, 최대 속도, 연비 등은 연속형 변수이기 때문에 RadarPlot을 사용하는게 맞는 지 생각해봐야 한다.
- feature의 순서에 따라 면적이 달라지기 때문에 면적이 가지는 의미에 유의해야 한다.
- Feature가 많아질수록 가독성이 떨어진다.
위 polar coordinate의 fill을 적합하게 사용하면 Radar Chart를 사용할 수 있다. 끝점을 포함하기 위해서 마지막 데이터를 포함시켜줘야 한다. 그래야 끝 값과 첫 값 선을 연결할 수 있다.
- set_thetagrids : 각도에 따른 그리드 및 ticklabels 변경
- set_theta_offset : 시작 각도 변경
fig = plt.figure()
ax = fig.add_subplot(111, projection='polar')
# 끝값과 첫값을 연결하기
values.append(values[0])
theta = theta.tolist() + [theta[0]]
ax.plot(theta, values)
ax.fill(theta, values, alpha=0.5)
plt.show()
print(values)
print(theta)
한 번에 여러 개의 데이터 비교하기
fig = plt.figure(figsize=(14, 4))
for idx in range(3):
ax = fig.add_subplot(1,3,idx+1, projection='polar')
values = pokemon.iloc[idx][stats].to_list()
values.append(values[0])
ax.plot(theta, values, color='forestgreen')
ax.fill(theta, values, color='forestgreen', alpha=0.3)
ax.set_rmax(100)
ax.set_thetagrids([n*60 for n in range(6)], stats)
ax.set_theta_offset(np.pi/2)
plt.show()
Pie Chart
많이 사용되는 시각화 방법이다. 원을 부채꼴로 분할해 표현하는 통계차트이다. 전체를 백분위로 나타낼 때 유용하지만, 가장 많이 사용하는 차트임에도 연구에서는 지양하는 차트이다. 왜냐하면 feature의 개수가 많아지거나 비율의 차이가 적으면 구분이 쉽지 않고, 보통 사람의 눈은 각도를 통한 비교보다는 크기에 대한 이해가 더 효과적이라고 한다. 따라서 사용을 하고 싶다면 다른 차트와 같이 사용하는 것이 좋다.
파이차트와 유사한 차트로 중간이 비어있는 Donut Chart, 햇살을 닮은 Sunburst 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()
- PieChart Custom
- startangle: 시작 위치를 지정
- explode: 파이차트의 특정 부분을 띄울 수 있다.
- shadow: 그림자(음영)효과
- autopct: 전체 비율을 %로 나타내준다.
- labeldistance: label의 길이를 조정한다.
- rotatelabels: 라벨이 원을 따라서 기울여진다. (비추천)
- counterclock: 시계방향으로 그릴 수 있다.
- textprops: 글자의 색상을 변경할 수 있다.
fig, ax = plt.subplots(1, 1, figsize=(7, 7))
explode = [0, 0, 0.2, 0]
ax.pie(data, labels=labels, explode=explode, startangle=90,
shadow=True, autopct='%1.1f%%', labeldistance=1.24, textprops={'color':"purple"}
# , rotatelabels=90
)
plt.show()
▶ Review (생각)
'IT 견문록 > 함수 및 코드 (디지털치매 대비)' 카테고리의 다른 글
Linux Shell & Vi Editor Command (0) | 2022.02.15 |
---|---|
Visualization Libraries (Missingno, Treemap, WaffleChart, Venn) (0) | 2022.02.11 |
Seaborn 멀티차트 사용법 (0) | 2022.02.06 |
Seaborn API별 사용법 (0) | 2022.02.06 |
Pytorch Trouble Shooting (0) | 2022.01.26 |