2025. 11. 25. 20:59ㆍTIL
Seaborn barplot 공부
데이터 분석 과정에는 다양한 plot을 그리게 되는데, 미감적으로 깔끔한 plot을 추구하다 보니 matplotlib보다는 seaborn을 더 많이 사용하게 되는 것 같다. seaborn이 matplotlib보다 미각적으로 훨씬 다양한 옵션을 제공하고 더 쓰기 편하다.
그런데 seaborn에 대해서는 많이 배운 적이 없다보니, 제대로 된 barplot 하나 그리는 게 어렵다. bar 색깔도 예쁘게 설정해보고 싶고, bar마다 값도 표기하고 싶고..여러가지 옵션을 넣은 그래프를 그리고 싶은데 그냥 막 하는 것보다는 공부를 좀 하고 그리는 게 낫다 싶어, barplot에 대해 공부를 하게 되었다.
Seaborn barplot의 특징
Seaborn barplot은 pivot table보다는 데이터프레임 그 자체를 쓰는 것이 더 편하다. estimator라는 parameter를 활용해 각 컬럼별 계산 (평균, 합계, 최대값, 최소값, 개수)을 자동으로 수행해 준다.
barplot에는 x, y, 그리고 hue를 설정할 수 있다. x는 가로축에 놓을 변수, y는 세로축에 놓을 변수, hue는 x, y축에 있는 2차원 데이터를 구분하는 기준이다. 즉 x를 이용해 그룹화된 데이터를 hue를 이용해 한 번 더 그룹화할 수 있고, 이 결과를 자동으로 estimator가 계산한다.
Seaborn barplot의 예시
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = sns.load_dataset("penguins")
sns.barplot(
data=df,
x='species',
y='flipper_length_mm',
hue='sex',
# 1. 통계 옵션 (평균 대신 합계, 오차막대는 표준편차)
estimator='sum',
errorbar='sd',
# 2. 디자인 및 정렬 옵션
palette='pastel', # 색상 테마
order=['Gentoo', 'Chinstrap', 'Adelie'], # X축 순서 내 마음대로
hue_order=['Male', 'Female'] # 범례 순서 지정
)
plt.title("Sum of Flipper Length by Species")
plt.show()
seaborn의 example dataset인 penguins를 불러와 barplot을 만들어보았다.
data : plot을 그릴 dataframe을 지정한다.
x : x축으로 지정할 변수
y : y축으로 지정할 변수hue : x축과 y축 상에 놓은 값들을 어떻게 구분할 것인가? seaborn의 핵심 기능으로, hue를 사용하지 않으면 seaborn을 쓰는 의미가 별로 없는 것 같다 (개인적인 생각).
hue를 써야 미감적으로 더 예쁜 그래프를 그릴 수도 있고, seaborn의 다양한 기능을 제대로 활용할 수가 있다.estimator : 계산법 (mean, sum, max, min, count 등)errorbar : 에러바를 사용할지 말지 설정할 수 있다. DataFrame 원본을 사용하지 않는 경우는 쓰기 어렵다.palette : seaborn의 꽃 중 하나인 색상 지정. 제공되는 palette 옵션 뿐만 아니라 커스터마이징도 가능하다.order : x축을 어떤 순서로 나타낼 것인지 리스트 설정에 따라 다양한 순서 지정이 가능하다.
# 컬럼의 고유값을 추출해 리스트로 저장하는 방법
species_list = df['species'].unique().tolist()
# 컬럼의 고유값을 추출해 정렬된 리스트로 저장하는 방법
sorted_list = sorted(df['species'].unique(), reverse=True)
# 데이터가 많은 순서대로 컬럼의 고유값을 추출하는 방법
freq_order = df['species'].value_counts().index.tolist()
# x축의 값을 기준으로 오름차순 정렬하는 방법
my_order = df.groupby('species')['bill_depth_mm'].mean().sort_values().index
hue_order : hue가 나타날 순서를 지정. ['Male', 'Female']에서 ['Female', 'Male']로 바꾸면 Female 값들이 먼저 나오게 된다.

위 코드를 실행하면 다음과 같은 그래프를 얻을 수 있다.
그래프에 bar의 값 표시하기
fig, axes=plt.subplots(1, 3, figsize=(18, 6))
cols = ['bill_depth_mm', 'bill_length_mm', 'flipper_length_mm']
titles = ['Bill Depth', 'Bill Length', 'Flipper Length']
for i, col in enumerate(cols):
ax = axes[i]
sns.barplot(ax=ax,
data=df,
x='species',
y=col,
hue='sex',
errorbar=None,
palette='Set2')
ax.set_title(f"Mean {titles[i]}")
for container in ax.containers:
ax.bar_label(container, fmt='%.1f', padding=3, fontsize=10, label_type='center')
plt.tight_layout()
plt.savefig('penguin_stats.png', dpi=300, bbox_inches='tight', transparent=True)
plt.show()
barplot의 bar마다 해당하는 값을 표기하고 싶을 때는 반복문을 이용해야 한다.
seaborn은 직접적으로 bar에 값을 표기하는 parameter를 지정하지는 않지만, containers라는 메서드와 bar_label을 사용하면 원하는 결과를 얻을 수 있다. containers는 barplot의 각 bar를 의미한다.
반복문을 이용해 barplot에 있는 모든 container마다 bar_label 함수로 각 container별 값을 present하도록 설정할 수 있다.
'TIL' 카테고리의 다른 글
| 251127_BootCamp Day 29_데이터 분석 기초 프로젝트 (6) (0) | 2025.11.27 |
|---|---|
| 251126_BootCamp Day 28_데이터 분석 기초 프로젝트 (5) (2) | 2025.11.26 |
| 251124_BootCamp Dat 26_데이터 분석 기초 프로젝트 (3) (1) | 2025.11.24 |
| 251121_BootCamp Day 25_데이터 분석 기초 프로젝트 (2) (1) | 2025.11.21 |
| 251120_BootCamp Day 24_데이터 분석 기초 프로젝트 (1) (2) | 2025.11.20 |