본문 바로가기

Data visualization with python

[Python] seaborn - sns.relplot (lineplot, scatterplot 한방에 해결)

안녕하세요 :)
seaborn으로 데이터시각화하기 두번째 게시물은 relplot입니다
relplot 하나로 lineplot, scatteplot 모두 활용가능한데요~
궁금한점은 댓글로 부탁드려요 ~*
20210126_relplot

Chapter2. Python seaborn - sns.relplot

seaborn 의 relation plot, relplot 소개

  • Figure-level interface for drawing relational plots onto a FacetGrid.
  • Default로 그리면 sns.scatterplot 과 같고, 'kind="line"' 옵션과 함께 사용하면 sns.lineplot과 같음
  • 그럼 scatterplot과 lineplot을 사용하지 왜 relplot을 사용하냐? : 바로바로 'col', 'row' 옵션때문
In [1]:
# 기본 라이브러리 설치
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

# 기본 데이터셋 불러오기
tips = sns.load_dataset('tips')
tips.head()
Out[1]:
total_bill tip sex smoker day time size
0 16.99 1.01 Female No Sun Dinner 2
1 10.34 1.66 Male No Sun Dinner 3
2 21.01 3.50 Male No Sun Dinner 3
3 23.68 3.31 Male No Sun Dinner 2
4 24.59 3.61 Female No Sun Dinner 4

기본 relplot은 scatterplot과 동일하다

In [2]:
sns.relplot(data=tips, x="total_bill", y="tip", hue="day")
Out[2]:
<seaborn.axisgrid.FacetGrid at 0x7fa678c3a3a0>

kind 옵션 'line' 사용시 lineplot과 동일해진다

In [3]:
sns.relplot(data=tips, x="total_bill", y="tip", kind='line')
Out[3]:
<seaborn.axisgrid.FacetGrid at 0x7fa67b78b880>

'col','row' 옵션을 이용하면 categorical variable(범주형 변수)로 나눠서 그려줌

In [4]:
sns.relplot(data=tips, x="total_bill", y="tip", hue="day", col="time")
Out[4]:
<seaborn.axisgrid.FacetGrid at 0x7fa67b78b310>
In [5]:
sns.relplot(data=tips, x="total_bill", y="tip", hue="day", col="time", row="sex")
Out[5]:
<seaborn.axisgrid.FacetGrid at 0x7fa67bc88040>
In [6]:
# 아래와 같이 사용할 수 있다.
fmri = sns.load_dataset("fmri")
g = sns.relplot(
    data=fmri,
    x="timepoint", y="signal",
    # 'style' 옵션을 사용하여 hue로 나누어 나타냈던 line의 stlye도 다르게 표현할 수 있음.
    hue="event", style="event", col="region",
    # 'height'과 'aspect'를 통하여 그래프 높이와 너비 조절 가능
    height=4, aspect=0.7, kind="line"
)

# matplotlib.pyplot의 axhline 를 이용하여 회색(0.7) 점선(dashes=(2,1)을 보조선으로 그어줌)
(g.map(plt.axhline, y=0, color=".7", dashes=(2, 1), zorder=0)
  .set_axis_labels("Timepoint", "Percent signal change")
  .set_titles("Region: {col_name} cortex"))

# 그래프 사이의 padding을 없애서 컴팩트하게 표현
plt.tight_layout(w_pad=0, h_pad=0)