[Seaborn] 7. jointplot
seaborn jointplot
joint plot의 각 차트별로 특성이 뚜렷해서 구분!
사용할 데이터
import numpy as np
import pandas as pd
n = 1000
# 기본 능력치 생성 (학생들의 전반적인 학습 능력)
base_ability = np.random.normal(0, 1, size=n)
physical_ability = np.random.normal(0, 1, size=n) # 체육 능력 추가
# 과목별 점수 생성
국어 = 75 + 10 * (0.7 * base_ability + 0.3 * np.random.normal(0, 1, size=n))
영어 = 72 + 12 * (0.6 * base_ability + 0.4 * np.random.normal(0, 1, size=n))
수학 = 70 + 15 * (0.8 * base_ability + 0.2 * np.random.normal(0, 1, size=n))
# 체육은 수학과 반비례하도록 -base_ability 사용
체육 = 80 + 8 * (-0.6 * base_ability + 0.8 * physical_ability + 0.2 * np.random.normal(0, 1, size=n))
# 점수 범위 조정 및 반올림
data = {
'국어': np.round(np.clip(국어, 50, 100), 1),
'영어': np.round(np.clip(영어, 50, 100), 1),
'수학': np.round(np.clip(수학, 50, 100), 1),
'체육': np.round(np.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. joint : 기본
plt.figure(figsize=(10, 10))
sns.jointplot(
# 기본 데이터 설정: 데이터프레임 / X축 / Y축
data=df, x='국어', y='수학',
)
plt.suptitle('국어와 수학의 상관관계', y=1.02)
- 기본적으로 각 축에 대해서 히스토그램을 표시하고, 메인 차트에서 산점도를 보여준다.
2. joint : scatter
sns.jointplot(
# 기본 데이터 설정: 데이터프레임 / X축 / Y축
data=df, x='국어', y='수학',
# 산점도 설정: 종류 / 색상 / 투명도 / 점크기 / 마커종류
kind='scatter', color='darkblue', alpha=0.5, s=50, marker='o',
# 크기 설정: 차트 변 / 중앙vs주변 비율 / 중앙 주변 공간
height=8, ratio=8, space=0.2,
# 주변 분포 설정: 눈금표시 / 구간개수 / 색상 / 투명도 / 테두리
marginal_ticks=True,
marginal_kws={'bins':50, 'color':'darkblue', 'alpha':0.6,
'edgecolor':'white', 'linewidth':1}
)
3. joint : KDE
sns.jointplot(
# 기본 데이터 설정: 데이터프레임 / X축 / Y축
data=df, x='국어', y='수학',
# KDE 설정: 종류 / 색상맵 / 투명도
kind='kde', cmap='Blues', alpha=0.8,
# 크기 설정: 차트 변 / 중앙vs주변 비율 / 중앙 주변 공간
height=8, ratio=8, space=0.2,
# kde 설정: 등고선 수 / 채우기 / 최소밀도
joint_kws={'levels':6, 'fill':True, 'thresh':0.0},
# 주변 분포 설정: 눈금표시 / 채우기 / 색상 / 투명도 / 선두께 / 선스타일
marginal_ticks=True,
marginal_kws={'fill':True, 'color':'darkblue', 'alpha':0.6,
'linewidth':1, 'linestyle':'-'}
)
- 등고선 레벨 / 등고선 사이 채우기 / 영역 색칠하기 위한 밀도
4. joint : hex
sns.jointplot(
# 기본 데이터 설정: 데이터프레임 / X축 / Y축
data=df, x='국어', y='수학',
# 육각형 설정: 종류 / 색상맵 / 투명도
kind='hex', cmap='viridis', alpha=0.75,
# 크기 설정: 전체크기 / 비율 / 공간
height=8, ratio=8, space=0.2,
# hex 설정: 그리드크기 / 최소카운트 / 러그표시
joint_kws={'gridsize':25, 'mincnt':None, 'marginals':False},
# 히스토그램 설정: 눈금표시 / 구간개수 / 색상 / 투명도 / 테두리색상 / 테두리두께 / 통계량
marginal_ticks=True,
marginal_kws={'bins':50, 'color':'darkblue', 'alpha':0.6,
'edgecolor':'white', 'linewidth':1, 'stat':'density'}
)
plt.suptitle('국어-수학 점수 분포 (Hex)', y=1.02, size=15)
- mincnt에 True를 넣어주면 데이터가 있는 부분에만 색칠된다. 아닌 경우 아래 차트처럼 전체에 칠해진다.
- marginal 부분은 위에 히스토그램 설정이다.
5. joint : reg
sns.jointplot(
# 기본 데이터 설정: 데이터프레임 / X축 / Y축
data=df, x='국어', y='수학',
# 산점도 설정: 종류 / 색상
kind='reg', color='darkblue',
# 크기 설정: 차트 변 / 중앙vs주변 비율 / 중앙 주변 공간
height=8, ratio=8, space=0.2,
# 회귀선 설정: 산점도 설정 / 회귀선 설정
joint_kws={'scatter_kws':{'alpha':0.5, 's':50, 'marker':'o'}, # 산점도 스타일
'line_kws':{'color':'red', 'linewidth':2}}, # 회귀선 스타일
# 주변 분포 설정: 눈금표시 / 구간개수 / 색상 / 투명도 / 테두리
marginal_ticks=True,
marginal_kws={'bins':50, 'color':'darkblue', 'alpha':0.6,
'edgecolor':'white', 'linewidth':1}
)
- 회귀선이 메인이라 scatter이랑 회귀선 line은 joint_kws에서 전달해야한다.
정리
1. scatter
sns.jointplot(
# 기본 데이터 설정: 데이터프레임 / X축 / Y축
data=df, x='국어', y='수학',
# 산점도 설정: 종류 / 색상 / 투명도 / 점크기 / 마커종류
kind='scatter', color='darkblue', alpha=0.5, s=50, marker='o',
# 크기 설정: 차트 변 / 중앙vs주변 비율 / 중앙 주변 공간
height=8, ratio=8, space=0.2,
# 주변 분포 설정: 눈금표시 / 구간개수 / 색상 / 투명도 / 테두리
marginal_ticks=True,
marginal_kws={'bins':50, 'color':'darkblue', 'alpha':0.6,
'edgecolor':'white', 'linewidth':1}
)
2. KDE
sns.jointplot(
# 기본 데이터 설정: 데이터프레임 / X축 / Y축
data=df, x='col1', y='col2',
# KDE 설정: 종류 / 색상맵 / 투명도
kind='kde', cmap='Blues', alpha=0.8,
# 크기 설정: 차트 변 / 중앙vs주변 비율 / 중앙 주변 공간
height=8, ratio=8, space=0.2,
# kde 설정: 등고선 수 / 채우기 / 최소밀도
joint_kws={'levels':6, 'fill':True, 'thresh':0.0},
# 주변 분포 설정: 눈금표시 / 채우기 / 색상 / 투명도 / 선두께 / 선스타일
marginal_ticks=True,
marginal_kws={'fill':True, 'color':'darkblue', 'alpha':0.6,
'linewidth':1, 'linestyle':'-'}
)
3. Hex
sns.jointplot(
# 기본 데이터 설정: 데이터프레임 / X축 / Y축
data=df, x='col1', y='col2',
# 육각형 설정: 종류 / 색상맵 / 투명도
kind='hex', cmap='viridis', alpha=0.75,
# 크기 설정: 전체크기 / 비율 / 공간
height=8, ratio=8, space=0.2,
# hex 설정: 그리드크기 / 최소카운트 / 러그표시
joint_kws={'gridsize':25, 'mincnt':None, 'marginals':False},
# 히스토그램 설정: 눈금표시 / 구간개수 / 색상 / 투명도 / 테두리색상 / 테두리두께 / 통계량
marginal_ticks=True,
marginal_kws={'bins':50, 'color':'darkblue', 'alpha':0.6,
'edgecolor':'white', 'linewidth':1, 'stat':'density'}
)
4. reg
sns.jointplot(
# 기본 데이터 설정: 데이터프레임 / X축 / Y축
data=df, x='col1', y='col2',
# 산점도 설정: 종류 / 색상
kind='reg', color='darkblue',
# 크기 설정: 차트 변 / 중앙vs주변 비율 / 중앙 주변 공간
height=8, ratio=8, space=0.2,
# 회귀선 설정: 산점도 설정 / 회귀선 설정
joint_kws={'scatter_kws':{'alpha':0.5, 's':50, 'marker':'o'}, # 산점도 스타일
'line_kws':{'color':'red', 'linewidth':2}}, # 회귀선 스타일
# 주변 분포 설정: 눈금표시 / 구간개수 / 색상 / 투명도 / 테두리
marginal_ticks=True,
marginal_kws={'bins':50, 'color':'darkblue', 'alpha':0.6,
'edgecolor':'white', 'linewidth':1}
)
스니펫
{
# scatter
"Seaborn Jointplot Scatter Template": {
"prefix": "sns_jointscatter",
"body": [
"sns.jointplot(",
" # 기본 데이터 설정: 데이터프레임 / X축 / Y축",
" data=${1:df}, x='${2:col1}', y='${3:col2}',",
"",
" # 산점도 설정: 종류 / 색상 / 투명도 / 점크기 / 마커종류",
" kind='scatter', color='${4:darkblue}', alpha=${5:0.5}, s=${6:50}, marker='${7:o}',",
"",
" # 크기 설정: 차트 변 / 중앙vs주변 비율 / 중앙 주변 공간",
" height=${8:8}, ratio=${9:8}, space=${10:0.2},",
"",
" # 주변 분포 설정: 눈금표시 / 구간개수 / 색상 / 투명도 / 테두리",
" marginal_ticks=True,",
" marginal_kws={'bins':${11:50}, 'color':'${12:darkblue}', 'alpha':${13:0.6},",
" 'edgecolor':'white', 'linewidth':1}",
")"
],
"description": "Create a Seaborn scatter jointplot with common parameters"
},
# kde
"Seaborn Jointplot KDE Template": {
"prefix": "sns_jointkde",
"body": [
"sns.jointplot(",
" # 기본 데이터 설정: 데이터프레임 / X축 / Y축",
" data=${1:df}, x='${2:col1}', y='${3:col2}',",
"",
" # KDE 설정: 종류 / 색상맵 / 투명도",
" kind='kde', cmap='${4:Blues}', alpha=${5:0.8},",
"",
" # 크기 설정: 차트 변 / 중앙vs주변 비율 / 중앙 주변 공간",
" height=${6:8}, ratio=${7:8}, space=${8:0.2},",
"",
" # kde 설정: 등고선 수 / 채우기 / 최소밀도",
" joint_kws={'levels':${9:6}, 'fill':${10:True}, 'thresh':${11:0.0}},",
"",
" # 주변 분포 설정: 눈금표시 / 채우기 / 색상 / 투명도 / 선두께 / 선스타일",
" marginal_ticks=True,",
" marginal_kws={'fill':${12:True}, 'color':'${13:darkblue}', 'alpha':${14:0.6},",
" 'linewidth':1, 'linestyle':'-'}",
")"
],
"description": "Create a Seaborn KDE jointplot with common parameters"
},
# hex
"Seaborn Jointplot Hex Template": {
"prefix": "sns_jointhex",
"body": [
"sns.jointplot(",
" # 기본 데이터 설정: 데이터프레임 / X축 / Y축",
" data=${1:df}, x='${2:col1}', y='${3:col2}',",
"",
" # 육각형 설정: 종류 / 색상맵 / 투명도",
" kind='hex', cmap='${4:viridis}', alpha=${5:0.75},",
"",
" # 크기 설정: 전체크기 / 비율 / 공간",
" height=${6:8}, ratio=${7:8}, space=${8:0.2},",
"",
" # hex 설정: 그리드크기 / 최소카운트 / 러그표시",
" joint_kws={'gridsize':${9:25}, 'mincnt':${10:None}, 'marginals':${11:False}},",
"",
" # 히스토그램 설정: 눈금표시 / 구간개수 / 색상 / 투명도 / 테두리색상 / 테두리두께 / 통계량",
" marginal_ticks=True,",
" marginal_kws={'bins':${12:50}, 'color':'${13:darkblue}', 'alpha':${14:0.6},",
" 'edgecolor':'white', 'linewidth':1, 'stat':'density'}",
")"
],
"description": "Create a Seaborn hex jointplot with common parameters"
},
# reg
"Seaborn Jointplot Regression Template": {
"prefix": "sns_jointreg",
"body": [
"sns.jointplot(",
" # 기본 데이터 설정: 데이터프레임 / X축 / Y축",
" data=${1:df}, x='${2:col1}', y='${3:col2}',",
"",
" # 산점도 설정: 종류 / 색상",
" kind='reg', color='${4:darkblue}',",
"",
" # 크기 설정: 차트 변 / 중앙vs주변 비율 / 중앙 주변 공간",
" height=${5:8}, ratio=${6:8}, space=${7:0.2},",
"",
" # 회귀선 설정: 산점도 설정 / 회귀선 설정",
" joint_kws={'scatter_kws':{'alpha':${8:0.5}, 's':${9:50}, 'marker':'${10:o}'},",
" 'line_kws':{'color':'${11:red}', 'linewidth':${12:2}}},",
"",
" # 주변 분포 설정: 눈금표시 / 구간개수 / 색상 / 투명도 / 테두리",
" marginal_ticks=True,",
" marginal_kws={'bins':${13:50}, 'color':'${14:darkblue}', 'alpha':${15:0.6},",
" 'edgecolor':'white', 'linewidth':1}",
")"
],
"description": "Create a Seaborn regression jointplot with common parameters"
}
}
'Data Visualization > Seaborn' 카테고리의 다른 글
[Seaborn] 10. stripplot (0) | 2024.11.15 |
---|---|
[Seaborn] 9. countplot (0) | 2024.11.15 |
[Seaborn] 8. pairplot (0) | 2024.11.15 |
[Seaborn] 6. heatmap (0) | 2024.11.15 |
[Seaborn] 5. barplot (0) | 2024.11.15 |
[Seaborn] 4. violin plot (0) | 2024.11.15 |
[Seaborn] 3. boxplot (0) | 2024.11.15 |
댓글