Matplotlib - violinplot()

category
URL
date
Jan 27, 2023
slug
Matplotlib-violinplot
author
status
Public
tags
Playdata_Python
summary
Matplotlib-violinplot에 관해서
type
Post
thumbnail
updatedAt
Jan 27, 2023 08:19 AM

violinplot()

  • box plot과 kde(커널 밀도 함수) 둘을 콤비네이션한 그래프
  • 생김새가 바이올린 같다하여 violin plot이라고 불림
  • 세로 방향으로 kde의 모양을 그리는데 kde가 좌우 대칭되게 그려짐
  • 규칙은 box and whisker plot과 비슷, 하나 이상의 카테고리 column을 가지고 데이터의 분포를 나란히 그림
  • 그래프들의 분포를 비교하기에 적합
  • 샘플 사이즈에 따라 분포에 영향이 있을 수 있으므로 그 점을 참고
df = sns.load_dataset("titanic")
sns.violinplot(x=df["age"])
notion image
 
1.카테고리 Dtype을 갖는 class column 활용하여 y축 값으로 설정
  • 각 카테고리마다 갖는 데이터 분포를 y축을 기준으로 하여 분리해서 그릴 수 있다.
# 카테고리 daype을 갖는 class column
sns.violinplot(data=df, x="age",y="class")
notion image
 
2.x 키워드 인수에 카테고리 자료형을 설정
  • violin plot 방향이 vertical 하게 변경
# x키워드 인수에 카테고리 자료형 설정
sns.violinplot(data=df,x='class',y='age',hue='alive')
notion image
 
3.hue에 설정한 alive column의 값에 따라 좌측, 우측 각각 분포 그려내기
  • split 키워드 인수에 True 값을 전달하는 조건으로 hue에 설정된 값의 level이 단 두개여야한다.
  • 현재 hue에 설정된 alive가 갖는 값이 ‘yes’와 ‘no’단 두개이기 떄문에 split키워드 인수에 True 설정을 할 수 있다.
  • hue의 level이 정확히 2개가 아니라면 실행 조차 안되고 ValueError를 반환
  • split 키워드 인수의 값을 True로 하고 싶다면 반드시 hue에 오는 column의 값이 단 2가지만으로만 분류 되어야 함.
# hue에 설정한 alive column의 값에 따라 좌축, 우축 각각 분포그려냄
sns.violinplot(data=df, x="deck", y="age", hue="alive", split=True)
notion image
 
4.violin plot을 표현할 때 범위를 제한할 수 있음.
  • 값의 표현 범위를 명확히 하기 위해서 cut이라는 키워드 인수 사용
  • cut 키워드 인수에 0값을 작성하면 가지고 있는 데이터의 범위를 초과해서 그래프가 표현되지 않음
  • 0이외의 실수 값을 입력하면 대역폭(bandwidth)의 크기가 됨.
# 값의 표현 범위를 명확히 하기 위해서 cut이라는 키워드 인수 사용
sns.violinplot(data=df, x="age", y="alive",cut=0)
notion image
 
👇
notion image
← 범위를 초과해서 표현되지 않음
 
5.bw 키워드
  • kde의 그래프 모양을 부드럽게 처리하다보면 대역폭의 크기가 커짐
  • 이를 줄이기 위해선 bw 키워드 인수에 소수 값을 갖는 비율 설정
# bw 키워드 인수
sns.violinplot(data=df, x="age", y="alive",bw=.15)
notion image
6.inner키워드
  • violin plot 내부에 데이터의 분포를 직접적으로 표현 가능
  • inner 키워드 인수에 stick이란 값을 전달
# 내부에 데이터의 분포를 직접적으로 표현 inner 키워드
sns.violinplot(data=df, x="age", y="embark_town",inner='stick')
notion image
 
 
7. scale에 따라 각 그래프의 크기가 달라짐.
  • scale은 총 area, count, width의 값을 지정할 수 있으며 기본 값은 area이다.
  • area는 violin의 영영ㄱ 너비가 같에 그려짐
  • count는 실제 갖는 데이터 개수에 따라 그 violin의 크기가 달라짐
  • width는 violin이 동일한 폭을 갖게 됨
# scale 지정
sns.violinplot(data=df,x="age",y="embark_town",scale="count",cut=0)
notion image