일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 코딩테스트
- 머신러닝
- Python
- scikit learn
- 딥러닝
- ML
- pytorch
- 통계
- matplotlib
- tableau
- r
- 태블로
- sklearn
- IRIS
- SQL
- 데이터분석
- 이것이 코딩테스트다
- Google ML Bootcamp
- 시각화
- 데이터 전처리
- pandas
- ADsP
- 이코테
- 회귀분석
- 데이터분석준전문가
- Deep Learning Specialization
- 자격증
- 데이터 분석
- SQLD
- 파이썬
- Today
- Total
함께하는 데이터 분석
[Python] Matplotlib violinplot 그리기 본문
이번에는 matplotlib을 통하여
violinplot을 그려보겠습니다.
데이터는 boxplot에서 쓴 iris데이터를 사용하겠습니다.
같은 데이터로 그래프를 그리면 차이점을 명확히 느낄 수 있겠죠?
시작해보겠습니다.
라이브러리 불러오기
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
plt.rc('font', family = 'AppleGothic') # mac
# plt.rc('font', family = 'Malgun Gothic') # window
plt.rc('font', size = 12)
plt.rc('axes', unicode_minus = False) # -표시 오류 잡아줌
데이터 불러오기
iris = sns.load_dataset("iris")
iris.head()
데이터 확인하기
iris.shape
>>> (150, 5)
iris.info()
iris.describe()
단일 violinplot 그리기
plt.figure(figsize = (10, 5))
plt.violinplot(iris['sepal_length'])
plt.show()
boxplot에서 violinplot으로 바꿔주면 됩니다.
그래프를 보시면 boxplot처럼 최대 최소를 나타내 주는 선이 존재하고
옵션을 활용하면 중위수나 quantile을 넣어줄 수 있습니다.
차이점은 분포의 모습을 보여준다는 것이죠.
분포의 모습도 확인하고 싶을 때 사용하시면 됩니다.
여러 개의 violinplot 그리기
idx = np.arange(1, 5)
labels = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width']
plt.figure(figsize = (10, 5))
plt.violinplot([iris['sepal_length'], iris['sepal_width'],\
iris['petal_length'], iris['petal_width']])
plt.xticks(idx, labels)
plt.show()
idx를 이용하여 각각의 violinplot이 어떤 column 데이터로 이루어졌는지
label을 달아줬습니다.
이번에도 마찬가지로 수평 violinplot을 그려볼까요?
수평 violinplot 그리기
idx = np.arange(1, 5)
labels = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width']
plt.figure(figsize = (10, 5))
plt.violinplot([iris['sepal_length'], iris['sepal_width'],\
iris['petal_length'], iris['petal_width']],\
vert = False)
plt.yticks(idx, labels)
plt.show()
vert = False 즉, 수직이 아닌 수평으로 그린다는 의미입니다.
이제 boxplot처럼 median을 표시하는 선을 그어볼까요?
Median 표시하기
idx = np.arange(1, 5)
labels = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width']
plt.figure(figsize = (10, 5))
plt.violinplot([iris['sepal_length'], iris['sepal_width'],\
iris['petal_length'], iris['petal_width']],\
showmedians = True)
plt.xticks(idx, labels)
plt.show()
plt.violinplot에 showmedians = True를 넣어주면
medain을 표시해줍니다.
평균을 그려주고 싶으면 showmeans = True를 이용하면 됩니다.
이번에는 50% 중위수가 아닌 다양한 quantiles를 표시해주겠습니다.
Quantiles 설정하기
idx = np.arange(1, 5)
labels = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width']
quantiles = [[0.75, 0.25], [0.1, 0.9], [0.2, 0.8], [0.4, 0.6]]
plt.figure(figsize = (10, 5))
plt.violinplot([iris['sepal_length'], iris['sepal_width'],\
iris['petal_length'], iris['petal_width']],\
quantiles = quantiles)
plt.xticks(idx, labels)
plt.show()
quantiles라는 보고 싶은 분위수를 리스트로 만들고
quatiles인자에 넣어주면 됩니다.
만약 boxplot처럼 보고 싶다면 [0.25, 0.75]로 설정해주시면 됩니다.
색상 지정하기
idx = np.arange(1, 5)
labels = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width']
plt.figure(figsize = (10, 5))
vi = plt.violinplot([iris['sepal_length'], iris['sepal_width'],\
iris['petal_length'], iris['petal_width']],\
showmedians = True)
plt.xticks(idx, labels)
vi['bodies'][0].set_facecolor('aqua')
vi['bodies'][1].set_facecolor('red')
vi['bodies'][2].set_facecolor('lightgreen')
vi['bodies'][3].set_facecolor('pink')
plt.show()
plt.violinplt을 vi에 할당시켜주고
vi['bodies']에 인덱스를 설정한 다음
set_facecolor을 통해 색깔을 지정해주면 됩니다.
하지만 그래프의 개수가 늘어나면 한줄한줄 코드를 작성하기 번거롭습니다.
for문을 통하여 쉽게 작성해 볼까요?
for문을 통하여 색상 지정하기
idx = np.arange(1, 5)
labels = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width']
colors = ['aqua', 'red', 'lightgreen', 'pink']
plt.figure(figsize = (10, 5))
vi = plt.violinplot([iris['sepal_length'], iris['sepal_width'],\
iris['petal_length'], iris['petal_width']],\
showmedians = True)
plt.xticks(idx, labels)
for i in range(0, 4) :
vi['bodies'][i].set_facecolor(colors[i])
plt.show()
colors에 원하는 색상을 리스트로 할당시켜주고
vi['bodies']와 colors에 인덱싱을 통하여
한 번에 설정해줬습니다.
마지막으로 title, xlabel, ylabel을 달아주겠습니다.
종합
idx = np.arange(1, 5)
labels = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width']
colors = ['aqua', 'red', 'lightgreen', 'pink']
plt.figure(figsize = (10, 5))
plt.title("iris 데이터의 violinplot")
plt.xlabel('꽃받침, 꽃잎의 길의 너비')
plt.ylabel('단위 : cm')
vi = plt.violinplot([iris['sepal_length'], iris['sepal_width'],\
iris['petal_length'], iris['petal_width']],\
showmedians = True)
plt.xticks(idx, labels, rotation = 30)
for i in range(0, 4) :
vi['bodies'][i].set_facecolor(colors[i])
plt.show()
다음에는 subplot을 이용하여
여러 개의 그래프를 한 화면에 그려보도록 하겠습니다!
'데이터분석 공부 > Python' 카테고리의 다른 글
[Python] excel, csv, tsv 불러오기 및 저장하기 (0) | 2022.09.04 |
---|---|
[Python] Matplotlib 여러 개의 그래프 한번에 그리기 (0) | 2022.04.14 |
[Python] Matplotlib boxplot 그리기 (0) | 2022.04.12 |
[Python] Matplotlib 파이 차트 그리기 (0) | 2022.04.09 |
[Python] Matplotlib 다중 막대그래프 (0) | 2022.04.08 |