조금씩 꾸준히 완성을 향해

[Seaborn] 다양한 그래프 그리기3 (violinplot, jointplot, FacetGrid, pairplot) 본문

Python/데이터 시각화

[Seaborn] 다양한 그래프 그리기3 (violinplot, jointplot, FacetGrid, pairplot)

all_sound 2022. 10. 1. 23:24

박스플롯 vs 바이올린 플롯


  • boxplot(): 범주형 데이터 분포와 주요 통계 지표 함께 제공 -> 분산 파악 어려움
  • violinplot(): 커널 밀도 함수 그래프를 y축 방향에 추가
# 그래프 객체 생성(figure에 4개의 서브플롯을 생성)
fig = plt.figure(figsize=(15,10))
ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)
ax4 = fig.add_subplot(2,2,4)

# 그래프 그리기
sns.boxplot(x='alive', y='age', palette='Set2', data=titanic, ax=ax1)
sns.boxplot(x='alive',  y='age', hue='sex', palette='Set2', data=titanic, ax=ax2) # hue: x축을 추가
sns.violinplot(x='alive',  y='age', palette='Set2', data=titanic, ax=ax3) 
sns.violinplot(x='alive',  y='age',hue='who', palette='Set2', data=titanic, ax=ax4) # hue: x축을 추가

# title 설정
ax1.set_title('boxplot- alive vs age')
ax2.set_title('boxplot- alive vs age vs sex')
ax3.set_title('violinplot- alive vs age')
ax4.set_title('violinplot- alive vs age vs sex')
plt.show()


조인트 그래프


  •  jointplot() : 산점도를 기본으로 표시하고, xy축에 각 변수에 대한 히스토그램을 동시에 보여줌
  • 두 변수 관계와 데이터가 분산되어 있는 정도를 한눈에 파악하기에 좋음
  • kind='reg' (regression), kind='hex'(hexagon), kind='kde'(kernel density)
fig = plt.figure(figsize=(17,10))

#jointplot 그리기
ax1 = sns.jointplot(x='fare', y='age', palette='Set2', data=titanic)
ax2 = sns.jointplot(x='fare',  y='age', kind='reg', palette='Set2', data=titanic)
ax3 = sns.jointplot(x='fare',  y='age', kind='hex', palette='Set2', data=titanic)
ax4 = sns.jointplot(x='fare',  y='age', kind='kde', palette='Set2', data=titanic)

# title 설정
ax1.fig.suptitle('jp fare vs age')
ax2.fig.suptitle('jp fare vs age-regression')
ax3.fig.suptitle('jp fare vs age-hexagon')
ax4.fig.suptitle('jp fare vs age-kernel density')
plt.show()

 

 

조건에 맞게 화면 분할


  • FacetGrid() : 행,열 방향으로 서로 다른 조건을 적용하여 여러 개의 서브 플롯 생성 (경우의 수 만큼)
  • map()  : 각 서브 플롯에 적용할 그래프 종류를 그리드 객체에 전달
g = sns.FacetGrid(data=titanic, row='survived', col='who')
g.map(plt.hist, 'age')
plt.show()

이변수 데이터의 분포


  • pairplot() : 인자로 전달되는 데이터프레임의 열(변수)을 두 개씩 짝 지을 수 있는 모든 조합에 대해 표현
pair = titanic[['age', 'pclass', 'fare', 'survived']]
sns.pairplot(pair)