BioPlayground

🧬
목록으로

Seaborn — 선언적 시각화

Seaborn의 선언적 문법으로 boxplot, countplot, heatmap을 빠르게 그리는 방법을 배웁니다.

입문
|
10
|
검증 완료 (2026-07)
Seaborn선언적 시각화boxplotcountplotmatplotlib 비교
진행률0/14 (0%)

Seaborn — 선언적 시각화

이 토픽을 마치면

Seaborn의 선언적 문법이 matplotlib과 어떻게 다른지 이해하고, boxplot, countplot, heatmap을 한 줄로 그릴 수 있습니다.


matplotlib이 불편해지는 순간

matplotlib로 "부서별 연봉 분포"를 그리려면 이런 코드가 됩니다:

python
import matplotlib.pyplot as plt
import numpy as np
departments = df['department'].unique()
positions = range(len(departments))
fig, ax = plt.subplots()
for i, dept in enumerate(departments):
salaries = df[df['department'] == dept]['salary']
ax.boxplot(salaries, positions=[i], widths=0.6)
ax.set_xticks(positions)
ax.set_xticklabels(departments)
ax.set_ylabel('연봉')
ax.set_title('부서별 연봉 분포')
plt.show()

루프를 돌려서 데이터를 분리하고, 위치를 계산하고, 라벨을 직접 설정합니다. Seaborn으로 같은 그래프를:

python
import seaborn as sns
sns.boxplot(data=df, x='department', y='salary')
plt.show()

두 줄입니다. "뭘 보여줄지"만 말하면 나머지는 Seaborn이 처리합니다. 이것이 선언적(declarative) 문법입니다.


명령형 vs 선언적

matplotlib (명령형)Seaborn (선언적)
관점"어떻게 그릴지" 단계별 지시"무엇을 보여줄지" 선언
데이터 분리직접 루프/필터링자동 (x, y, hue)
색상/범례수동 지정자동 생성
커스터마이징매우 세밀대부분 자동, 세밀한 건 matplotlib

Seaborn은 matplotlib 위에 만들어진 래퍼입니다. 기본 설정으로 예쁜 그래프를 빠르게 만들고, 세밀한 조정이 필요하면 matplotlib으로 내려갑니다.


핵심 그래프 5가지

1. 분포 — histplot

python
sns.histplot(data=df, x='salary', bins=20, kde=True)

kde=True를 추가하면 밀도 추정선(부드러운 커브)이 겹쳐서 그려집니다.

2. 범주별 분포 — boxplot

python
sns.boxplot(data=df, x='department', y='salary')

중앙값, 사분위, 이상치를 한눈에 봅니다. 부서 간 연봉 차이를 비교할 때 가장 효과적입니다.

3. 개수 세기 — countplot

python
sns.countplot(data=df, x='department', hue='gender')

각 카테고리의 빈도를 막대로 보여줍니다. hue로 성별 같은 하위 분류를 추가하면 색상으로 나뉩니다.

4. 관계 — scatterplot

python
sns.scatterplot(data=df, x='experience', y='salary', hue='department')

두 수치 변수의 관계를 점으로 찍습니다. 경력과 연봉이 비례하는지 한눈에 보입니다.

5. 상관관계 — heatmap

python
corr = df[['salary', 'experience', 'age']].corr()
sns.heatmap(corr, annot=True, cmap='coolwarm', vmin=-1, vmax=1)

annot=True로 숫자를 표시하고, cmap으로 색상 팔레트를 지정합니다. 양의 상관(빨강), 음의 상관(파랑)이 색상으로 구분됩니다.


hue — 세 번째 변수

Seaborn의 가장 강력한 기능입니다:

python
# hue 없이 — 전체 산점도
sns.scatterplot(data=df, x='experience', y='salary')
# hue 추가 — 부서별로 색상 분리
sns.scatterplot(data=df, x='experience', y='salary', hue='department')

hue는 세 번째 변수를 색상으로 인코딩합니다. matplotlib로 이걸 하려면 루프를 돌면서 색상을 직접 지정해야 합니다. Seaborn은 한 단어면 됩니다.


스타일 설정

python
# 전체 스타일 변경
sns.set_theme(style='whitegrid')
# 팔레트 변경
sns.set_palette('Set2')
# 개별 그래프에서
sns.boxplot(data=df, x='dept', y='salary', palette='pastel')

스타일 옵션:

  • darkgrid — 기본값, 회색 배경 + 격자
  • whitegrid — 흰 배경 + 격자
  • dark — 격자 없는 회색 배경
  • white — 깔끔한 흰 배경
  • ticks — 축 눈금만

Seaborn + matplotlib 조합

python
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
sns.boxplot(data=df, x='dept', y='salary', ax=axes[0])
axes[0].set_title('부서별 연봉')
sns.histplot(data=df, x='salary', bins=20, ax=axes[1])
axes[1].set_title('전체 연봉 분포')
plt.tight_layout()
plt.show()

ax 파라미터로 matplotlib의 Axes에 Seaborn 그래프를 넣을 수 있습니다. 레이아웃은 matplotlib로, 그래프 내용은 Seaborn으로 — 이 조합이 실전 패턴입니다.


핵심

Seaborn은 "무엇을 보여줄지"만 선언하면 알아서 그려주는 시각화 라이브러리입니다. hue 한 단어로 세 번째 변수를 색상으로 인코딩 — 이것이 Seaborn의 핵심 강점입니다. 빠른 탐색은 Seaborn, 세밀한 조정은 matplotlib — 둘 다 쓸 줄 알아야 합니다.