본문 바로가기
Data Visualization/Seaborn

[Seaborn] 5. barplot

by 베짱이28호 2024. 11. 15.

[Seaborn] 5. barplot

seaborn 막대 그래프


사용할 데이터

from sqlalchemy import create_engine
import numpy as np
import pandas as pd

n = 300

data = {
    '국어': np.round(np.random.normal(75, 10, size=n).clip(50, 100), 1),
    '영어': np.round(np.random.normal(72, 12, size=n).clip(50, 100), 1),
    '수학': np.round(np.random.normal(70, 15, size=n).clip(50, 100), 1),
    '성별': np.random.choice(['남', '여'], size=n),
    '반': np.random.choice([f'{i}반' for i in range(1,10)], size=n)
}

df = pd.DataFrame(data)

1. 막대그래프 기본

plt.figure(figsize=(12, 6))

sns.barplot(
    data=df, x='반', y='국어'
)
  • data에 데이터프레임, x랑 y에 각각 컬럼 삽입


2. 그룹화

plt.figure(figsize=(12, 6))

sns.barplot(
    # 기본 데이터 설정: 데이터프레임 / X축(범주) / Y축(수치)
    data=df, x='반', y='국어',
    
    # 그룹화 및 스타일링: 색상 구분 / 팔레트 / 채도
    hue='성별', palette='muted', saturation=0.7,
)
    • 성별에 따른 색상 분류


3. 스타일링

plt.figure(figsize=(12, 6))

sns.barplot(
    # 기본 데이터 설정: 데이터프레임 / X축(범주) / Y축(수치)
    data=df, x='반', y='국어',
    
    # 그룹화 및 스타일링: 색상 구분 / 팔레트 / 채도
    hue='성별', palette='muted', saturation=0.7,
    
    # 막대 스타일링: 너비 / 테두리색 / 테두리두께
    width=0.8, edgecolor='black', linewidth=2,
)
    • 막대 그래프 두께, 테두리 등 설정이 가능하다.


4. 통계량 설정

plt.figure(figsize=(12, 6))

sns.barplot(
    # 기본 데이터 설정: 데이터프레임 / X축(범주) / Y축(수치)
    data=df, x='반', y='국어',
    
    # 그룹화 및 스타일링: 색상 구분 / 팔레트 / 채도
    hue='성별', palette='muted', saturation=0.7,
    
    # 막대 스타일링: 너비 / 테두리색 / 테두리두께
    width=0.8, edgecolor='black', linewidth=2,
    
    # 통계 설정: 계산함수 / 오차막대 / 오차막대 캡 크기
    # (종류, 신뢰수준 95%) - 'ci':신뢰구간 , 'se':표준오차, 'sd':표준편차, 'pi':예측구간, None
    estimator=np.mean, errorbar=('ci',68), capsize=0.3
)


5. 상세 커스터마이징

# 스타일 설정
plt.style.use('seaborn-v0_8')
plt.rcParams["font.family"] = "D2coding"
plt.figure(figsize=(12, 6))

# 기본 막대 그래프
sns.barplot(
    # 기본 데이터 설정: 데이터프레임 / X축(범주) / Y축(수치)
    data=df, x='반', y='국어',
    
    # 그룹화 및 스타일링: 색상 구분 / 팔레트 / 채도
    hue='성별', palette='Set2', saturation=0.8,
    
    # 막대 스타일링: 너비 / 테두리색 / 테두리두께
    width=0.75, edgecolor='white', linewidth=1.5,
    
    # 통계 설정
    estimator=np.mean, errorbar=None
)

# 제목과 레이블
plt.title('반별 국어 평균 점수', pad=15, fontsize=13)
plt.xlabel('반', fontsize=11)
plt.ylabel('점수', fontsize=11)

# y축 범위 설정 (데이터를 더 잘 보이게)
plt.ylim(50, 100)

# 범례 설정
plt.legend(
    title='성별',
    loc='upper right',
    frameon=True
)

# 격자 추가 (y축만)
plt.grid(axis='y', linestyle='--', alpha=0.3)

plt.tight_layout()


 

정리

sns.barplot(
    # 기본 데이터 설정: 데이터프레임 / X축(범주) / Y축(수치)
    data=df, x='반', y='국어',
    
    # 그룹화 및 스타일링: 색상 구분 / 팔레트 / 채도
    hue='성별', palette='muted', saturation=0.7,
    
    # 막대 스타일링: 너비 / 테두리색 / 테두리두께
    width=0.8, edgecolor='black', linewidth=2,
    
    # 통계 설정: 계산함수 / 오차막대 종류 / 오차막대 캡 크기
    estimator=np.mean, errorbar=('ci',68), capsize=0.3
)
  • 스니펫으로 설정해서 불러올 수 있게 설정하면 끝
{
    "Seaborn Barplot Template": {
        "prefix": "sns_bar",
        "body": [
            "sns.barplot(",
            "    # 기본 데이터 설정: 데이터프레임 / X축(범주) / Y축(수치)",
            "    data=${1:df}, x='${2:col1}', y='${3:col2}',",
            "",
            "    # 그룹화 및 스타일링: 색상 구분 / 팔레트 / 채도",
            "    hue='${4:col3}', palette='${5:muted}', saturation=${6:0.7},",
            "",
            "    # 막대 스타일링: 너비 / 테두리색 / 테두리두께",
            "    width=${7:0.8}, edgecolor='${8:black}', linewidth=${9:2},",
            "",
            "    # 통계 설정: 계산함수 / 오차막대 종류 / 오차막대 캡 크기",
            "    # errorbar=('ci',68): 1시그마, ('ci',95): 2시그마, ('ci',99): 3시그마",
            "    # 종류: 'ci':신뢰구간, 'se':표준오차, 'sd':표준편차, 'pi':예측구간, None",
            "    estimator=${10:np.mean}, errorbar=${11:None}, capsize=${12:0.3}",
            ")"
        ],
        "description": "Create a Seaborn barplot with common parameters"
    }
}

'Data Visualization > Seaborn' 카테고리의 다른 글

[Seaborn] 8. pairplot  (0) 2024.11.15
[Seaborn] 7. jointplot  (0) 2024.11.15
[Seaborn] 6. heatmap  (0) 2024.11.15
[Seaborn] 4. violin plot  (0) 2024.11.15
[Seaborn] 3. boxplot  (0) 2024.11.15
[Seaborn] 2. histplot  (0) 2024.11.15
[Seaborn] 1. scatterplot  (0) 2024.11.14

댓글