Seaborn Basic 01
Seaborn Gallery 에 살펴보면, pariplot, catplot, FacetGrid 가 등장한다
link : https://seaborn.pydata.org/examples/index.html
더욱이 pariplot 파트는 4개, catplot은 2개, facetGrid 도 3개 이상 존재한다. 이들 관계가 무엇인지 살펴보는것이 이번 수업의 목표이다.
import seaborn as sns
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
sns.set(style="whitegrid")
%matplotlib inline
PairPlot
iris = sns.load_dataset("iris")
g = sns.pairplot(iris, hue="species")
# g.map(sns.pointplot)
print(type(g))
<class 'seaborn.axisgrid.PairGrid'>
type 형태를 봐서는 Pairplot 은 diagos선을 중심으로 위.아래가 같다. 그리고, FacetGrid 와 연관되어 있다. 결론부터 말하자만, PairGrid, Catplot, Pairplot 은 모두 FacetGrid 객체를 좀 더 편리하게 사용하기 위해 만들어진 하위 클래스 개념이다
CatPlot
catplot 은 <class ‘seaborn.axisgrid.FacetGrid’> 를 사용한다
주로 "g = " 으로 객체를 따로 받아서 사용한다
category 변수와, 숫자형변수의 관계를 보여주기 위해서 사용한다.
col 속성을 이용하면, 변수dim 을 더 확장하여 보여주게 된다 (여러개 그리고 싶을때 핵심)
내가 선택한 변수관계에 따라서, 자동으로 gird 구조의 subplot을 그려주는 것이 특징
kind 로 표현하는 그래프 형식을 여러개 바꿀수 있다
# Load the example Titanic dataset
titanic = sns.load_dataset("titanic")
titanic.head(3)
survived | pclass | sex | age | sibsp | parch | fare | embarked | class | who | adult_male | deck | embark_town | alive | alone | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 3 | male | 22.0 | 1 | 0 | 7.2500 | S | Third | man | True | NaN | Southampton | no | False |
1 | 1 | 1 | female | 38.0 | 1 | 0 | 71.2833 | C | First | woman | False | C | Cherbourg | yes | False |
2 | 1 | 3 | female | 26.0 | 0 | 0 | 7.9250 | S | Third | woman | False | NaN | Southampton | yes | True |
# Draw a nested barplot to show survival for class and sex
g = sns.catplot(x="class", y="survived", hue="sex",col="who", data=titanic,height=6, kind="bar", palette="muted")
g.despine(left=True)
g.set_ylabels("survival probability")
<seaborn.axisgrid.FacetGrid at 0x1bf45e652b0>
print(type(g))
<class 'seaborn.axisgrid.FacetGrid'>
# Load the example exercise dataset
df = sns.load_dataset("exercise")
# Draw a pointplot to show pulse as a function of three categorical factors
g = sns.catplot(x="time", y="pulse", hue="kind", col="diet",capsize=.2, palette="YlGnBu_d", height=6, aspect=.75,
kind="point", data=df)
g.despine(left=True)
<seaborn.axisgrid.FacetGrid at 0x1bf45248518>
PairGrid
PairGrid 는 PairPlot의 불편함을 없애려고 나온것이며, 대각선을 기준으로 위, 아래에 대해 각각의 시각화도구를 적용할 수 있는 점이 가장 큰 차이점이다
숫자형변수 - 숫자형변수 의 관계를 기본으로 그린다 (default 로 x_vars=None, y_vars = None 일 경우)
숫자형변수 - 카테고리컬변수 관계도 그릴 수 있으며, (x_vars , y_vars 를 설정하면)
내가 선택한 변수관계에 따라서, 자동으로 gird 구조의 subplot을 그려주는 것이 특징
gpg = sns.PairGrid(iris, diag_sharey=False, hue='species')
gpg.map_upper(sns.scatterplot)
gpg.map_lower(sns.kdeplot)
gpg.map_diag(sns.kdeplot, lw=2)
<seaborn.axisgrid.PairGrid at 0x1bf491a0ac8>
print(type(gpg))
<class 'seaborn.axisgrid.PairGrid'>
# Set up a grid to plot survival probability against several variables
gtitan = sns.PairGrid(titanic, y_vars="survived",x_vars=["class", "sex", "who", "alone"],height=5, aspect=.5)
# Draw a seaborn pointplot onto each Axes
gtitan.map(sns.pointplot, scale=1.3, errwidth=4, color="xkcd:plum")
gtitan.set(ylim=(0, 1))
sns.despine(fig=gtitan.fig, left=True)
# Load the dataset
crashes = sns.load_dataset("car_crashes")
# Make the PairGrid
gcrash = sns.PairGrid(crashes.sort_values("total", ascending=False),x_vars=crashes.columns[:-3], y_vars=["abbrev"],
height=10, aspect=.25)
# Draw a dot plot using the stripplot function
gcrash.map(sns.stripplot, size=10, orient="h",palette="ch:s=1,r=-.1,h=1_r", linewidth=1, edgecolor="w")
# Use the same x axis limits on all columns and add better labels
g.set(xlim=(0, 25), xlabel="Crashes", ylabel="")
#############################################################################
# Use semantically meaningful titles for the columns
titles = ["Total crashes", "Speeding crashes", "Alcohol crashes","Not distracted crashes", "No previous crashes"]
## gcrash.axes 각각의 subplot 변 title 를 붙여주는 과정임
for ax, title in zip(gcrash.axes.flat, titles):
# Set a different title for each axes
ax.set(title=title)
# Make the grid horizontal instead of vertical
ax.xaxis.grid(False)
ax.yaxis.grid(True)
sns.despine(left=True, bottom=True)
gcrash.axes
array([[<matplotlib.axes._subplots.AxesSubplot object at 0x000001BF47261F28>,
<matplotlib.axes._subplots.AxesSubplot object at 0x000001BF47281710>,
<matplotlib.axes._subplots.AxesSubplot object at 0x000001BF472A6EF0>,
<matplotlib.axes._subplots.AxesSubplot object at 0x000001BF472D4710>,
<matplotlib.axes._subplots.AxesSubplot object at 0x000001BF472FBF28>]],
dtype=object)
Comments