projection='polar' 파라미터 전달polar=True 파라미터 전달fig = plt.figure()
ax1 = fig.add_subplot(121, projection='polar')
ax2 = fig.add_subplot(122, polar=True)
fig.tight_layout()
plt.show()
# 아래 사진을 보면 차이가 없이 생성되었음을 알 수 있음

set_rmax(x) : Polar Coordinate 수치 최댓값을 x로 지정set_rmin(x) : Polar Coordinate 시작 수치를 x로 지정fig = plt.figure()
ax = fig.add_subplot(111, polar=True)
ax.set_rmax(2)
plt.show()

fig = plt.figure()
ax = fig.add_subplot(111, polar=True)
ax.set_thetamin(45)
ax.set_thetamax(135)
plt.show()


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()
set_thetagrids 활용fig = plt.figure(figsize=(4, 4))
ax = fig.add_subplot(111, projection='polar')
stats = ["HP", "Attack", "Defense", "Sp. Atk", "Sp. Def", "Speed"]
values = pokemon.iloc[0][stats].to_list()
values.append(values[0])
ax.plot(theta, values)
ax.fill(theta, values, alpha=0.5)
ax.set_thetagrids([n*60 for n in range(6)], stats)
"""
n = 0일때만 고려해보자.
먼저, 첫번째 Parameter는 0도가 될 것이다. 또 stats에는 HP가 뽑힐 것이다
(stats[0]을 Select 해야하기 때문에)
따라서, 아래 그림처럼 원래 0도라는 수치가 써 있어야 하는 곳에 HP가 적혀 있음을
알 수 있다
"""
plt.show()

<설명>
Pie Chart는 각도를 활용. 따라서, data를 모두 더하여 T라는 값이 나왔다면,
360 / T 값을 모든 List에 곱해준 만큼의 각도를 차지하는 것으로 생각하면 된다
아래 예시에서는 모두 더하면 360이므로, 360 / 360 = 1만큼을
모든 List에 곱해줘 Pie Chart를 그린다. 각각 60도, 90도, 45도, 165도
의 공간을 Pie Chart에서 차지하게 그려야 함을 알 수 있다.
labels = ['A', 'B', 'C', 'D']
data = np.array([60, 90, 45, 165])
ax.pie(data, labels)
pie() Parameter
startangle=x : Pie Chart를 x도에서 그리기 시작함explode explode_list = [0,0,0.2,0]
ax.pie(data, explode=explode_list, labels=labels, startangle=90)

shadow : True로 설정될 경우, 그림자가 구현됨autopct : Pie Chart에 (해당 Pie가 차지하고 있는) 수치를 표현함ax.pie(data, labels=labels, explode=explode_list, startangle=90,
shadow=True, autopct='%1.1f%%')
# 소수점 1자리 수까지 표현하며, 마지막에 %라는 수치를 붙여 표현하도록 Formatting

labeldistance : label과 Pie Chart와의 거리 지정rotatelabelscounterclock : False로 지정할 경우 Start Point부터 시계 방향으로 순서대로 그림radius : Pie Chart 반지름for size, ax in zip([1, 0.8, 0.5], axes):
ax.pie(data, labels=labels, explode=explode_list, startangle=90,
radius=size)

pctdistance : 반지름의 길이를 1이라고 생각하여, 어느 위치에 Pie Chart 수치를 기입할지 정함centre_circle = plt.Circle((0,0),0.70,fc='white')
ax.add_artist(centre_circle)

pip install missingnoimport missingno as msnomsno.matrix({data})

msno.matrix({data}, sort='descending')
# 내림차순 정렬
# 오름차순 정렬을 위해서는 sort = 'ascending'으로 설정해주면 된다.
위 사진을 보면 row당 결측치의 수가 모두 다름을 볼 수 있다.
그런데, 위와 같은 사진으로 보면 어떤 Data가 어느 정도의 결측치를 가지고 있는지
한눈에 파악하기가 어렵다.
따라서, 결측치의 수를 기준으로 정렬을 수행하는 것이다.
이 경우, Row(1개 Data)가 가진 최대 결측치 개수와 최소 결측치 개수를 알 수 있으며,
Column 중 결측치가 많은 것들에 대해서도 파악하기 쉬우므로,
꼭 이 방법을 활용하는 것을 추천한다.

mano.bar({Data})pip install squarifysquarify.plot({Value List})values = [100, 200, 300, 400]
squarify.plot(values)

labelvalues = [100, 200, 300, 400]
label = list('ABCD')
squarify.plot(values, label=label)

colorlabel 파라미터와 활용 방법은 동일(단, List값이 색)padcolor = ['#4285F4', '#DB4437', '#F4B400', '#0F9D58']
squarify.plot(values, label=label, color=color, pad=0.2)

ax.axis('off') : 모든 축을 보이지 않게 함
<설명>
Waffle Chart는 정사각형을 활용하여 그림을 그린다.
이 때 중요한 점은 가로 세로를 어느 정도 Size로 정해줘야 한다는 점이다.
예를 들어, 가로 5, 세로 4라면 총 20개의 정사각형을 활용해 Waffle Chart를
그리는 것이다.
그리고, 우리가 활용할 수 있는 정사각형의 개수는 한정되어 있으므로
데이터 결손이 발생할 수 있다.
총 Data 개수가 30개라고 가정해보자.
그럴 경우, 20개 까지의 Data는 정사각형으로 표현할 수 있을 것이다.
하지만, 나머지 10개의 Data는 표현할 수 있는 정사각형이 남아 있지 않으므로,
표현할 수가 없을 것이다.
따라서 이런 상황에서는 "비율"을 활용하여 정사각형 개수를 할당해주는 것이다.
예를 들어, 9 : 21의 Data 비율을 가지고 있다면,
정사각형을 각각 6개, 14개를 할당해주어 Data를 Chart로 표현한 것이다.
그런데 만약 Data가 10 : 20이라면 어떻게 될까?
이 경우, 정확한 비율을 생각해보면 6.66666 : 13.333333이 될 것이다.
그런데, 정사각형 개수는 "정수"여야 하므로, 각각 7개와 13개의 정사각형을
할당해 줄 것이다. 이 과정에서 여쩔 수 없이 0.333333만큼의 데이터 결손이
발생할 수 있는 것이다
라이브러리 설치 : pip install pywaffle
Waffle Chart를 위한 import : from pywaffle import Waffle
Default Waffle Chart
fig = plt.figure(
FigureClass=Waffle
rows = 5,
columns = 10,
values = [48,46,6],
figsize=(5,3)
)
plt.show()FigureClass = Waffle을 활용하여 Waffle Chart를 그림
색 지정
legend
data = {'A': 50, 'B': 45, 'C': 15}
fig = plt.figure(
FigureClass=Waffle,
rows=5,
values=data,
legend={'loc': 'upper left', 'bbox_to_anchor': (1.1, 1)}
)
plt.show()

starting_location : 그래프 그리는 시작점을 네 꼭짓점 중 하나로 지정

vertical : Row 기준 수직 방향으로 그릴지 아닐지를 결정하는 Parameter

vertical=False 혹은 설정하지 않은 Casevertical=Truevertical=True로 설정할 경우 starting_location을 따로 설정하지 않을 때 'SW'로 설정됨을 알 수 있다. 이는 아래에서도 설명하겠지만, "오른쪽으로" 90도 돌려 Waffle Chart를 그리는 것으로 생각하면, 'SW' 부분이 시작 지점인 것을 알 수 있다.<설명>
결론만 먼저 말하자면, Waffle Chart를 그릴 때 (오른쪽으로) 90도 회전시킨 다음
수평으로 그릴지 수직으로 그릴지 결정하는 것으로 생각하면 된다
Vertical은 Data를 "어느 방향으로" 그릴 것인가를 설정하는 Parameter이다.
Vertical은 위에서 말했듯 "Row" 기준으로 수직으로 그릴지 아닐지를 결정한다.
Default는 Vertical이 False로 설정되어 있다.
즉, Row의 방향에 맞춰 그래프를 그린다는 의미이다.
우리는 Row Data를 이동하기 위해서는 위 아래로 움직여야 한다는 것을 알고 있다.
즉, a[0,0]과 a[1,0]의 차이는 "아래로" 한 칸 움직이는 것임을 알고 있다.
vetical = False일 때는 Row 방향에 수직하지 않으므로, 위아래로 움직이며
Waffle Chart를 그리게 될 것이다.
따라서, 위에서 아래로 혹은 아래에서 위로 움직이게 되는 것이다.
반대로 vertical = True일 경우, Row 방향에 수직한다. 즉, Column 방향과
평행하게 그려질 것이다.
Column 방향은 왼쪽에서 오른쪽 혹은 오른쪽에서 왼쪽으로 움직이는 것이다.
따라서, Data를 그릴 때 좌우로 움직이며 Waffle Chart를 그리게 될 것이다.
처음에는 좌우로 움직이는 것을 Horizontal이라고 생각하여 vertical=False로
설정해야 하는 것이 아닌가? 라는 고민을 많이 하였다.
하지만, 항상 생각하자. "ROW를 기준으로" Vertical하게 그릴지 아닐지를
결정하는 것이다.
block_arranging_style

Icon을 활용한 Pictogram Chart그리기
fig = plt.figure(
FigureClass=Waffle,
rows=10,
values=data,
legend={'loc': 'lower left', 'bbox_to_anchor': (0, -0.4),
'ncol': len(data), 'framealpha': 0},
icons='child',
icon_legend=True,
font_size=15,
)
plt.show()

pip install matplotlib_vennimport matplotlib_vennvenn2(subsets = (3, 2, 1))

venn3(subsets = (1, 2, 3, 4, 5, 6, 7),
set_labels = ('Set1', 'Set2', 'Set3'))

set1 = set(['A', 'B', 'C', 'D'])
set2 = set(['B', 'C', 'D', 'E'])
set3 = set(['C', 'D',' E', 'F', 'G'])
venn3([set1, set2, set3], ('Set1', 'Set2', 'Set3'))

사진 출처 : https://ko.wikipedia.org/wiki/%EB%A0%88%EC%9D%B4%EB%8B%A4_%EC%B0%A8%ED%8A%B8
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=vi_football&logNo=221445237451
https://venngage.com/blog/pictogram/
좋은 정보 감사합니다. ^^