본문 바로가기

Data Handling/Data Visualizing

seaborn 완벽 정리

여러분은 처음 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 축 이름을 변경할 수 있음

kde plot (using figure-level func)
kedplot groupby col (using figure-level func)

 

- 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