데이터 유형과 분석 목적에 따른 시각화 유형 선택 매트릭스, matplotlib/seaborn/plotly 구현 패턴 가이드. '시각화 선택', '차트 유형', '그래프 종류', 'matplotlib', 'seaborn', 'plotly', '히트맵', '산점도', '박스플롯', '대시보드 레이아웃' 등 데이터 시각화 설계 시 이 스킬을 사용한다. visualizer의 시각화 설계 역량을 강화한다. 단, 통계 분석이나 데이터 정제는 이 스킬의 범위가 아니다.
Scanned 5/29/2026
Install via CLI
openskills install revfactory/harness-100---
name: visualization-chooser
description: "데이터 유형과 분석 목적에 따른 시각화 유형 선택 매트릭스, matplotlib/seaborn/plotly 구현 패턴 가이드. '시각화 선택', '차트 유형', '그래프 종류', 'matplotlib', 'seaborn', 'plotly', '히트맵', '산점도', '박스플롯', '대시보드 레이아웃' 등 데이터 시각화 설계 시 이 스킬을 사용한다. visualizer의 시각화 설계 역량을 강화한다. 단, 통계 분석이나 데이터 정제는 이 스킬의 범위가 아니다."
---
# Visualization Chooser — 시각화 유형 선택 매트릭스 가이드
데이터 유형과 커뮤니케이션 목적에 맞는 최적의 시각화를 선택하는 프레임워크.
## 시각화 선택 매트릭스
### 비교
| 목적 | 차트 | 적합 | 예시 |
|------|------|------|------|
| 항목 비교 | 막대 차트 | 5~15개 카테고리 | 제품별 매출 |
| 시간 추이 비교 | 라인 차트 | 연속 시간, 2~5 시리즈 | 월별 매출 추이 |
| 부분-전체 | 스택 막대 | 비율 비교 | 채널별 매출 비중 |
| 소수 비율 | 파이 차트 | 2~5개 항목만 | 시장 점유율 |
| 다수 비율 | 트리맵 | 계층적 데이터 | 카테고리별 매출 |
### 분포
| 목적 | 차트 | 적합 | 예시 |
|------|------|------|------|
| 단일 분포 | 히스토그램 | 연속 변수 | 나이 분포 |
| 분포 비교 | 박스플롯 | 그룹별 비교 | 부서별 급여 |
| 밀도 비교 | 바이올린 플롯 | 분포 형태 중요 | 점수 분포 |
| 이상치 강조 | 스트립 플롯 | 소규모 데이터 | 개별 데이터 포인트 |
### 관계
| 목적 | 차트 | 적합 | 예시 |
|------|------|------|------|
| 두 변수 관계 | 산점도 | 연속×연속 | 광고비 vs 매출 |
| 다변수 상관 | 히트맵 | 상관 매트릭스 | 변수 간 상관 |
| 추세선 | 회귀 플롯 | 선형 관계 | 경험 vs 급여 |
| 밀도 산점도 | 2D 밀도 | 데이터 과다 | 위치 데이터 |
| 버블 차트 | 산점도 + 크기 | 3변수 | 국가별 GDP/인구/기대수명 |
### 시간
| 목적 | 차트 | 적합 | 예시 |
|------|------|------|------|
| 추세 | 라인 차트 | 연속 시계열 | 일별 주가 |
| 계절성 | 분해 그래프 | 주기 패턴 | 월별 전력 사용 |
| 이벤트 강조 | 어노테이션 라인 | 특정 시점 | 마케팅 캠페인 효과 |
| 범위 | 영역 차트 | 누적/비율 | 채널별 트래픽 |
## 구현 코드 패턴
### 한글 설정 (필수)
```python
import matplotlib.pyplot as plt
import platform
if platform.system() == 'Darwin': # macOS
plt.rcParams['font.family'] = 'AppleGothic'
elif platform.system() == 'Windows':
plt.rcParams['font.family'] = 'Malgun Gothic'
else: # Linux
plt.rcParams['font.family'] = 'NanumGothic'
plt.rcParams['axes.unicode_minus'] = False
```
### 색상 팔레트
```python
# 순서형 (연속 값)
palette_sequential = 'YlOrRd'
# 범주형 (구분)
palette_categorical = ['#4C72B0', '#55A868', '#C44E52', '#8172B3', '#CCB974']
# 발산형 (양극)
palette_diverging = 'RdBu_r'
# 접근성 고려
palette_colorblind = sns.color_palette('colorblind')
```
### 대시보드 레이아웃
```python
fig, axes = plt.subplots(2, 3, figsize=(18, 10))
fig.suptitle('매출 분석 대시보드', fontsize=16, fontweight='bold')
# KPI 카드 (텍스트 기반)
axes[0,0].text(0.5, 0.5, f'총 매출\n₩{total:,.0f}', ha='center', va='center', fontsize=20)
# 추이 차트
axes[0,1].plot(dates, sales, '-o')
# 분포
axes[0,2].boxplot([q1, q2, q3, q4])
# 비교
axes[1,0].barh(categories, values)
# 상관
sns.heatmap(corr_matrix, ax=axes[1,1], annot=True, cmap='RdBu_r')
# 파이
axes[1,2].pie(shares, labels=channels, autopct='%1.1f%%')
plt.tight_layout()
```
## 시각화 안티패턴
| 안티패턴 | 문제 | 해결 |
|---------|------|------|
| 3D 차트 | 왜곡, 읽기 어려움 | 2D 사용 |
| 이중 Y축 | 비교 오해 유발 | 별도 차트 또는 정규화 |
| 파이 5개 초과 | 비교 불가 | 막대 차트 전환 |
| 레인보우 색상 | 패턴 구분 어려움 | 순서/범주 팔레트 |
| 0이 아닌 Y축 시작 | 차이 과장 | Y축 0부터 시작 |
| 정보 과부하 | 핵심 놓침 | 강조점 하나에 집중 |
| 범례 없음 | 해석 불가 | 명확한 범례/라벨 |
## 인터랙티브 시각화 (Plotly)
```python
import plotly.express as px
# 산점도 + 색상 + 크기 + 호버
fig = px.scatter(
df, x='광고비', y='매출',
color='카테고리', size='고객수',
hover_data=['제품명'],
title='광고비 대비 매출 분석'
)
fig.show()
# Plotly → HTML 내보내기
fig.write_html('interactive_chart.html')
```
## 경영진 보고서용 시각화 원칙
```
1. 핵심 메시지 하나: 차트당 하나의 인사이트
2. 제목 = 결론: "매출이 15% 하락했다" (O) vs "월별 매출" (X)
3. 색상 = 의미: 빨강=나쁨, 초록=좋음, 회색=기준
4. 어노테이션: 핵심 수치 직접 표시
5. 비교 기준: 전월, 전년, 목표, 업계 평균
```
No comments yet. Be the first to comment!