25.05.19 코딩 공부 시작

코딩 척척석박사 분들 피드백 환영합니다.

공대생이 코딩에서 살아남기

특강/전처리 & 시각화

[전처리&시각화] 5일차(06.04)<fig, ax, seaborn, 색상 및 테마>

코딩 아가 2025. 6. 4. 20:56

 

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')