Seaborn은 데이터 시각화를 손쉽게 도와주는 파이썬 라이브러리입니다. 세련되게 디자인된 테마와 고수준 인터페이스를 기본으로 제공하기 때문에, 복잡한 설정 없이도 아름다운 통계 그래프를 만들 수 있습니다.
바이올린 플롯(Violin Plot)이란?
바이올린 플롯은 박스 플롯(box plot)과 커널 밀도 추정(KDE, Kernel Density Estimation)을 하나로 결합한 시각화 기법입니다. 데이터가 어떻게 분포되어 있는지 한눈에 파악하기 쉬워 데이터 분석에 널리 활용됩니다.
바이올린의 넓은 부분은 해당 구간에 데이터가 많이 몰려 있음(높은 밀도)을 의미하며, 좁은 부분은 데이터 밀도가 낮다는 것을 나타냅니다. 흥미로운 점은 박스 플롯의 사분위 범위(IQR)와 바이올린 플롯에서 밀도가 높은 영역이 대체로 같은 위치에 나타난다는 것입니다.
violinplot 함수 문법
seaborn.violinplot(x, y, hue, data, ...)
기본 상태에서는 각 카테고리별로 온전한 바이올린이 그려집니다. 이제 모든 바이올린을 분할(split)하는 방법을 단계별로 살펴보겠습니다.
기본 바이올린 플롯 예제
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
my_df = sb.load_dataset('tips')
sb.violinplot(x="day", y="total_bill", hue='sex', data=my_df)
plt.show()
출력 결과

코드 설명
- pandas, seaborn, matplotlib 등 필요한 패키지들을 임포트합니다.
- seaborn의 'load_dataset' 함수를 사용해 'tips' 데이터셋을 불러옵니다.
- 불러온 데이터는 데이터프레임(my_df) 형태로 저장됩니다.
- 'violinplot' 함수에 x축에는 'day'(요일), y축에는 'total_bill'(총 지출액), hue에는 'sex'(성별)를 지정하여 데이터를 시각화합니다.
- plt.show()를 호출해 완성된 그래프를 화면에 출력합니다.
split 매개변수로 바이올린 분할하기
hue로 두 개의 범주(여기서는 성별)를 지정한 상태에서 split=True 옵션을 추가하면, 각 바이올린이 좌우로 나뉘어 한쪽에는 첫 번째 범주의 분포가, 다른 쪽에는 두 번째 범주의 분포가 표시됩니다. 이렇게 하면 두 그룹의 데이터 분포를 같은 축 위에서 직접 비교할 수 있어 훨씬 직관적입니다.
sb.violinplot(x="day", y="total_bill", hue='sex', data=my_df, split=True) plt.show()
단, split 옵션은 hue에 정확히 두 개의 범주가 존재할 때만 사용할 수 있다는 점에 유의하세요. 세 개 이상의 범주가 있으면 오류가 발생합니다.