여러분은 처음 seaborn을 어떻게 사용했나요?
seaborn이 시각화에 좋다고 해서 그냥 import seaborn as sns 를 하고,
있을 법한 그래프를 메소드로 써서 실행시켜보시지는 않았나요?
displot이 어떤 plot인지도 모른채로, sns.distplot 인가, sns.displot 인가 고민하시지는 않았나요?
네, 제가 그랬습니다. 그래서 정리했습니다. seaborn!!
* 참고 자료 : seaborn.pydata.org/tutorial/function_overview.html
seaborn은 matplotlib 기반의 파이썬 시각화 라이브러리 입니다.
matplotlib 보다 더 이쁘고 쉽게 만들수 있다고 알려져 있죠.
그런데 이 seaborn 도 크게 두 가지 함수로 나뉘어져 있다는 사실,, 알고 계셨나요?
seaborn 함수들은 크게 'figure-level' 또는 'axes-level' 함수로 나뉘어져 있습니다.
첫 번째로 figure-level 함수 입니다.
figure-level 함수는 matplotlib 와 별개로 seaborn 의 figure를 만들어 그곳에 plotting 한다고 볼 수 있습니다.
따라서 figure-level 함수를 사용하여 seaborn 을 사용한 경우에는 facetgrid(seaborn의 figure)를 통해 레이아웃을 변경할 수 있습니다.
두 번째로 axes-level 함수입니다.
말 그대로 axes 수준에 plotting 을 한다는 것인데, figure-level 과는 다르게 matplotlib 의 axes에 그립니다.
따라서 이 경우에는 plt.figure() 와 같은 메소드로 레이아웃을 변경할 수 있습니다.
저희는 matplotlib 를 공부했기 때문에 axes-level 함수로 사용하는게 효율적이라고 생각합니다.
그럼 figure-level 함수에는 어떤게 있고, axes-level 함수에는 어떤게 있을까요?
아래 그림을 보시면 위에 큰 박스 세 개(replot, displot, catplot)가 figure-level 함수이고,
그 밑으로 달려있는 작은 박스들이 axes-level 입니다.
지금까지 figure-level 함수와 axes-level 함수의 차이를 정리했습니다.
이제 코드에서는 어떻게 달라지는지 살펴보겠습니다.
- figure-level
* 파라미터 종류, plot 종류 등 API 관련 정보 : seaborn.pydata.org/api.html
* 특징 : label 이 그래프 밖에 있음
* 장점 : col 파라미터로 groupby를 할 수 있음
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
# 데이터 준비
penguins = sns.load_dataset("penguins")
# figure-level
# displot을 통해 figure을 확보하고 kind를 통해 함수 선택, kind가 없으면 default 인 histplot 선택
sns.displot(data=penguins, x="flipper_length_mm", hue="species", multiple="stack", kind="kde")
# col을 활용한 groupby
g = sns.displot(data=penguins, x="flipper_length_mm", hue="species", col="species", kind = 'kde')
g.set_axis_labels('x','y') # x,y 축 이름을 변경할 수 있음
- axes-level
* ax 파라미터를 통해 plotting 할 곳을 지정해줌
* label 이 그래프 안에 있음
# axes-level
# matplotlib의 figure를 먼저 마련해줍니다
f, axs = plt.subplots(1, 2, figsize=(8, 4), gridspec_kw=dict(width_ratios=[4, 3]))
sns.scatterplot(data=penguins, x="flipper_length_mm", y="bill_length_mm", hue="species", ax=axs[0])
sns.histplot(data=penguins, x="species", hue="species", shrink=.8, alpha=.8, legend=False, ax=axs[1])
f.tight_layout()
- 번외 1) jointplot
* 두 가지 plot 을 한 번에 다 볼 수 있음
* kind를 통해 plot 종류를 변경할 수 있음
sns.jointplot(data=penguins, x="flipper_length_mm", y="bill_length_mm", hue="species", kind='scatter')
- 번외 2) pariplot
* 두 가지 변수 조합을 한 번에 확인함
sns.pairplot(data=penguins, hue="species")
'Data Handling > Data Visualizing' 카테고리의 다른 글
matplotlib 완벽 정리 (0) | 2020.10.15 |
---|