Matplotlib 고급 방식
기존: plt.plot(), plt.xlabel()
fig란?
전체 그림판 (캔버스)
ax란?
그림판 위의 각각의 그래프 영역
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 100) # 0부터 10까지 100개의 균일한 값
y1 = np.sin(x) # 사인 함수
y2 = np.cos(x) # 코사인 함수
# ax.set_title()로 제목 설정
fig, ax = plt.subplots(figsize=(8, 5))
ax.set_title('사인 함수 그래프')# 기본 제목
#축 라벨 설정
ax.plot(x, y1, 'b-', label='사인 함수')# label 지정
ax.plot(x, y2, 'r-', label='코사인 함수')# label 지정
plt.show()
#범례 설정
ax.legend()
축 범위 설정
ax.set_xlim(0, 5)# x축 범위: 0부터 5까지
ax.set_ylim(-0.5, 0.5)# y축 범위: -0.5부터 0.5까지
#눈금 설정
ax.set_xticks([0, 2, 4, 6, 8, 10])
ax.set_yticks([-1, -0.5, 0, 0.5, 1])
#격자 설정
ax.grid(True)# 기본 그리드
plt.subplots()
plt.subplots(
nrows=1, # 행(세로) 개수
ncols=1, # 열(가로) 개수
figsize=None,
sharex=False, # x축을 공유 (확대/축소가 연동됨)
sharey=False, # y축을 공유
subplot_kw=None, # 배경색 설정
gridspec_kw=None, ...) # 비율 3:1:2
Inset 차트(그래프 내 작은 그래프)
# Inset 차트 생성 (오른쪽 상단)
axins = inset_axes(ax, width="30%", height="30%", loc='upper right')
# 특정 구간 확대
x_zoom = x[0:100]
y_zoom = y[0:100]
axins.plot(x_zoom, y_zoom, 'r-', linewidth=2)
axins.set_title('확대 구간', fontsize=10)
axins.grid(True, alpha=0.3)
Seaborn
import seaborn as sns
import matplotlib.pyplot as plt
# 데이터 로드
tips = sns.load_dataset('tips')
# Matplotlib 산점도 그리기
plt.scatter(tips['total_bill'], tips['tip'])
plt.xlabel('Total Bill')
plt.ylabel('Tip')
plt.title('Scatter Plot (Matplotlib)')
# Seaborn 산점도 그리기
sns.scatterplot(x='total_bill', y='tip', data=tips)
plt.title('Scatter Plot (Seaborn)')
pairplot()
g = sns.pairplot(
iris,
hue="species", # 범주별 색상 구분
corner=True, # 좌하단만 표시(중복 제거)
height=2.6, # 서브플롯 한 변 길이 (inch)
diag_kind="kde", # 대각선에 커널밀도
palette="Set2" # 색상 팔레트
jointplot()
penguins = sns.load_dataset("penguins").dropna()
sns.jointplot(
data=penguins,
x="bill_length_mm",
y="bill_depth_mm",
hue="species", # 범주형 색상
kind="scatter", # 산점도+히스토그램 ("kde"=밀도, "reg"=산점도+회귀+신뢰구간)
fill=True # 등고선 내부 채우기
thresh=0.05 # 저밀도
height=6,
)
plt.show()
Colormap
cmap="색이름"
cmap="viridis"
cmap="viridis_r" #반전 버전: 이름 뒤에 _r 붙이기
Palette
palette="색이름"
테마 적용
plt.styple.use('이름')
- classic: 고전적인 느낌의 플롯
- bmh: 깔끔하고 이해하기 쉬운 플롯
- ggplot: 시각적으로 아름답고 일관성 있는 플롯
- seaborn: 데이터 시각화를 쉽게 가능
- fivethirtyeight: 명확하고 간결한 플롯
- Solarize_Light2: 눈에 편안한 색상
- dark_background: 어두운 배경을 사용, 플롯의 시각적 대비 향상
- fast: 빠른 렌더링을 위한 최소 스타일, 큰 데이터셋 유용
- grayscale: 흑백 인쇄에 적합
- tableau-colorblind10: 색맹을 고려한 10색 팔레트
인터랙티브 시각화
인터랙티브란?
사용자가 직접 조작하거나 상호작용할 수 있는 상태나 기능
Plotly
- 선형 그래프, 막대그래프, 파이차트, 산점도, 히트맵, 3D 차트 등 다양한 그래프 제공
- 마우스 오버(hover), 줌, 드래그 등 인터랙티브 기능 내장
- Dash와 연계하면 웹 앱 개발 가능 (Plotly 기반 대시보드 제작)
장점
- 고품질 그래프 출력
- HTML로 저장 가능 → 웹 페이지에 바로 삽입 가능
import plotly.express as px
df = px.data.iris()
fig = px.scatter(df, x='sepal_width', y='sepal_length', color='species')
fig.show()
Folium
- 위도/경도 데이터를 지도에 시각화
- 마커, 선, 도형, 팝업 등을 지도 위에 표현
- GeoJSON, Choropleth(지역별 색 표현) 등 공간 데이터 시각화 지원
장점:
- 간단한 코드로 Google Maps 스타일의 지도 생성
- 지도에 다양한 인터랙티브 요소 추가 가능
import folium
map = folium.Map(location=[37.5665, 126.9780], zoom_start=12)
folium.Marker([37.5665, 126.9780], popup='Seoul City Hall').add_to(map)
map.save('map.html')
'특강 > 전처리 & 시각화' 카테고리의 다른 글
| [전처리&시각화] 4일차(06.02) (2) | 2025.06.02 |
|---|---|
| [전처리&시각화] 3일차(05.30) (0) | 2025.05.30 |
| [전처리&시각화] 2일차(05.29) <데이터 정보, 결측치, 이상치> (0) | 2025.05.29 |
| [전처리&시각화] 1일차(05.28) (4) | 2025.05.28 |

