1. 그래프 그리기
1) Scatter Plot
sns.scatterplot(data=data, x='bill_length_mm', y='bill_depth_mm', hue='species')
2) Line Plot
sns.lineplot(data=data, x='bill_length_mm', y='bill_depth_mm', hue='species')
3) Bar Plot
sns.barplot(data=data, x='species', y='bill_length_mm', ci='sd') # 신뢰구간 포함
4) Histogram
#KDE 추가안한 버전
sns.histplot(data=data, x='bill_length_mm', hue='species', bins=20)
#KDE 추가한 버전
sns.histplot(data=data, x='bill_length_mm', hue='species', kde=True, bins=20)
5) KDE Plot
sns.kdeplot(data=data, x='bill_length_mm', hue='species', fill=True)
6) Box Plot
sns.boxplot(data=data, x='species', y='bill_length_mm', hue='sex')
7) Heatmap
corr = data.corr() # 상관관계 계산
sns.heatmap(corr, annot=True, fmt=".2f", cmap='coolwarm', linewidths=0.5,
annot_kws={"size": 10, "weight": "bold", "color": "blue"})
#annot = True : 각 셀 안에 상관계수 값을 숫자로 표시
#fmt = ".2f" : 소수점 2자리까지 표시. default는 소수점 없이 정수로 표시
#linewidths = 0.5 : 경계 두께
#cmap = 'coolwarm' : 색상 테마 적용
#annot_kws : 숫자의 글꼴 크기, 굵기, 색상 조절
8) Violin Plot
sns.violinplot(data=data, x='species', y='bill_length_mm', hue='sex', split=True)
9) Strip Plot
sns.stripplot(data=data, x='species', y='bill_length_mm', jitter=True, hue='sex')
10) Pair Plot
sns.pairplot(data=data, hue='species')
2. 꾸미기
#스타일 설정
sns.set_style('whitegrid') # white, darkgrid, whitegrid, ticks 등 사용 가능
#색상 테마 설정
sns.set_palette('pastel') # deep, muted, bright, pastel, dark, colorblind 사용 가능
#제목, 축 레이블, 범례 설정
plt.title('Title Example') # 제목
plt.xlabel('X-axis Label') # X축 레이블
plt.ylabel('Y-axis Label') # Y축 레이블
plt.legend(title='Legend Title') # 범례
#크기 및 비율 설정
plt.figure(figsize=(10, 6)) # 크기 설정
#축 조절 및 회전
plt.xticks(rotation=45) # X축 라벨 회전
plt.yticks(fontsize=12) # Y축 글꼴 크기 조절
#눈금선 및 테두리 조절
sns.despine(left=True, bottom=True) # 테두리 제거
#글꼴 설정
plt.rcParams['font.family'] = 'Arial' # 글꼴 설정
plt.rcParams['font.size'] = 12 # 글꼴 크기 설정
3. 여러 그래프 그리기
1) 같은 축에 여러 그래프 겹치기
import seaborn as sns
import matplotlib.pyplot as plt
# 데이터 불러오기
data = sns.load_dataset('penguins')
# 그래프 크기 설정
plt.figure(figsize=(10, 6))
# 첫 번째 그래프: 히스토그램
sns.histplot(data=data, x='bill_length_mm', hue='species', kde=True, alpha=0.3)
# 두 번째 그래프: 커널 밀도 그래프
sns.kdeplot(data=data, x='bill_length_mm', hue='species', lw=2)
# 세 번째 그래프: 평균선 추가
for species in data['species'].unique():
mean_val = data[data['species'] == species]['bill_length_mm'].mean()
plt.axvline(mean_val, linestyle='--', label=f'{species} Mean')
# 제목, 범례 추가
plt.title('Multiple Graphs in One Frame')
plt.legend()
plt.show()
cf) FacetGrid : 카테고리별 시각화가 필요할 때.
seaborn에서만 존재하는 방법
import seaborn as sns
import matplotlib.pyplot as plt
# 데이터 불러오기
data = sns.load_dataset('penguins')
# FacetGrid 활용
g = sns.FacetGrid(data, col='species', row='sex', margin_titles=True)
# 각 셀에 산점도 추가
g.map(sns.scatterplot, 'bill_length_mm', 'bill_depth_mm')
# 그래프 제목 및 레이아웃 조정
g.set_axis_labels('Bill Length (mm)', 'Bill Depth (mm)')
g.set_titles(row_template='{row_name}', col_template='{col_name}')
g.tight_layout(pad=1.0)
# 그래프 표시
plt.show()
g = sns.FacetGrid(data, col='species', row='sex', margin_titles=True)
- FacetGrid:
- 데이터를 그룹별로 나누어 여러 그래프(서브플롯)를 생성하는 도구.
- col='species':
- 열을 'species'(종) 기준으로 구분.
- row='sex':
- **행(Row)**을 'sex'(성별) 기준으로 구분.
- margin_titles=True:
- 행과 열 이름을 구석에 표시하여 더 깔끔하게 제목 정리.
g.map(sns.scatterplot, 'bill_length_mm', 'bill_depth_mm')
- g.map():
- FacetGrid의 각 셀(플롯)**에 동일한 그래프를 반복해서 그림.
- sns.scatterplot:
- 산점도 그래프를 각 셀에 그림.
- 'bill_length_mm', 'bill_depth_mm':
- X축과 Y축에 사용할 데이터 열(column) 선택.
Ex)
# 예제 데이터 생성
np.random.seed(10)
data = pd.DataFrame({
'category': np.random.choice(['A', 'B', 'C'], 100), # 3개의 카테고리
'group': np.random.choice(['X', 'Y'], 100), # 2개의 그룹
'x_value': np.random.rand(100) * 100, # 랜덤 X값 (0~100)
'y_value': np.random.rand(100) * 50 # 랜덤 Y값 (0~50)
})
g = sns.FacetGrid(data, col='category', row='group', margin_titles=True) # 카테고리와 그룹 기준으로 구분
g.map(sns.scatterplot, 'x_value', 'y_value', color='blue') # 산점도 그리기
2) 셀을 나눠서 그래프 배치
(1) 첫 번째 방법
import seaborn as sns
import matplotlib.pyplot as plt
# 데이터 불러오기
data = sns.load_dataset('penguins')
# 그래프 크기 설정
plt.figure(figsize=(12, 6))
# 첫 번째 그래프: 산점도
plt.subplot(1, 2, 1) # 1행 2열의 첫 번째 그래프
sns.scatterplot(data=data, x='bill_length_mm', y='bill_depth_mm', hue='species')
plt.title('Scatter Plot')
# 두 번째 그래프: 박스플롯
plt.subplot(1, 2, 2) # 1행 2열의 두 번째 그래프
sns.boxplot(data=data, x='species', y='bill_length_mm')
plt.title('Box Plot')
# 그래프 간격 조절 및 출력
plt.tight_layout()
plt.show()
(2) 두 번째 방법
import seaborn as sns
import matplotlib.pyplot as plt
# 데이터 불러오기
data = sns.load_dataset('penguins')
# 전체 그래프 크기 설정
fig, axes = plt.subplots(2, 2, figsize=(12, 10)) # 2행 2열
# 첫 번째 그래프 (산점도)
sns.scatterplot(data=data, x='bill_length_mm', y='bill_depth_mm', hue='species', ax=axes[0, 0])
axes[0, 0].set_title('Scatter Plot')
# 두 번째 그래프 (박스플롯)
sns.boxplot(data=data, x='species', y='bill_length_mm', ax=axes[0, 1])
axes[0, 1].set_title('Box Plot')
# 세 번째 그래프 (히스토그램)
sns.histplot(data=data, x='bill_length_mm', hue='species', kde=True, ax=axes[1, 0])
axes[1, 0].set_title('Histogram with KDE')
# 네 번째 그래프 (커널 밀도 그래프)
sns.kdeplot(data=data, x='bill_length_mm', hue='species', fill=True, ax=axes[1, 1])
axes[1, 1].set_title('Kernel Density Plot')
# 간격 조절 및 출력
plt.tight_layout()
plt.show()
'Visualization' 카테고리의 다른 글
matplotlib.pyplot) 히스토그램에서 밀도추정을 통해 연속적으로 표현하고 싶을 때. (0) | 2024.12.28 |
---|---|
matplotlib.pyplot) 기본 요소 (이걸 중심으로 기억하자) (0) | 2024.12.28 |
Streamlit. 캐시(cache)에 대해 (0) | 2024.08.14 |
Streamlit Share. 비밀번호 관리 (0) | 2024.08.13 |
태블로 대시보드 - TikTok Data by Kaggle (0) | 2024.05.22 |