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"])

1.카테고리 Dtype을 갖는 class column 활용하여 y축 값으로 설정
- 각 카테고리마다 갖는 데이터 분포를 y축을 기준으로 하여 분리해서 그릴 수 있다.
# 카테고리 daype을 갖는 class column
sns.violinplot(data=df, x="age",y="class")

2.x 키워드 인수에 카테고리 자료형을 설정
- violin plot 방향이 vertical 하게 변경
# x키워드 인수에 카테고리 자료형 설정
sns.violinplot(data=df,x='class',y='age',hue='alive')

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)

4.violin plot을 표현할 때 범위를 제한할 수 있음.
- 값의 표현 범위를 명확히 하기 위해서 cut이라는 키워드 인수 사용
- cut 키워드 인수에 0값을 작성하면 가지고 있는 데이터의 범위를 초과해서 그래프가 표현되지 않음
- 0이외의 실수 값을 입력하면 대역폭(bandwidth)의 크기가 됨.
# 값의 표현 범위를 명확히 하기 위해서 cut이라는 키워드 인수 사용
sns.violinplot(data=df, x="age", y="alive",cut=0)

👇

← 범위를 초과해서 표현되지 않음
5.bw 키워드
- kde의 그래프 모양을 부드럽게 처리하다보면 대역폭의 크기가 커짐
- 이를 줄이기 위해선 bw 키워드 인수에 소수 값을 갖는 비율 설정
# bw 키워드 인수
sns.violinplot(data=df, x="age", y="alive",bw=.15)

6.inner키워드
- violin plot 내부에 데이터의 분포를 직접적으로 표현 가능
- inner 키워드 인수에 stick이란 값을 전달
# 내부에 데이터의 분포를 직접적으로 표현 inner 키워드
sns.violinplot(data=df, x="age", y="embark_town",inner='stick')

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)
