컬러 스케일 선택 가이드
템플릿으로 전체 분위기는 잡았는데, 히트맵이나 지도처럼 연속적인 값을 색으로 표현하는 차트에서는 또 다른 선택이 필요했습니다. 컬러 스케일, 즉 수치가 높고 낮음에 따라 색이 어떻게 변하는지 결정하는 것입니다.
"그냥 예쁜 색 쓰면 안 되나요?"
지윤이 묻자 하은이 고개를 저었습니다. 하은은 UX 디자인 수업을 듣고 있었습니다.
"색은 정보야. 잘못 쓰면 오해가 생겨."
컬러 스케일의 세 가지 종류
순차형 (Sequential)
한 방향으로 값이 증가할 때 사용합니다. 밝은 색이 낮은 값, 진한 색이 높은 값을 나타냅니다.
Viridis: 파랑→초록→노랑. 색맹 친화적이고 인쇄에도 잘 보입니다.Plasma: 보라→빨강→노랑. 화려하고 강렬한 느낌.Blues: 연파랑→진파랑. 단색 계열로 심플합니다.YlOrRd: 노랑→주황→빨강. 온도나 위험도 표현에 자주 쓰입니다.
# 새 파일: colorscale_sequential.pyimport plotly.express as pximport numpy as np# 상관관계 행렬 (히트맵 예시)np.random.seed(42)data = np.random.rand(8, 8)fig = px.imshow( data, color_continuous_scale="Viridis", # 순차형 title="순차형 컬러 스케일 (Viridis)")fig.show()
실행하면 Viridis 컬러 스케일이 적용된 히트맵이 나타납니다. 짙은 보라색이 낮은 값, 밝은 노란색이 높은 값을 나타내며, 색맹 사용자도 구분하기 쉬운 균일한 색 분포를 확인할 수 있습니다.
발산형 (Diverging)
중간값을 기준으로 양쪽으로 발산하는 데이터에 사용합니다. 0을 기준으로 양수와 음수를 구분할 때, 또는 평균 대비 상하 편차를 보여줄 때 적합합니다.
RdBu: 빨강→흰색→파랑. 음수/양수 구분에 클래식합니다.RdGr: 빨강→흰색→초록. 손실/이익 표현.Picnic: 파랑→흰색→빨강. RdBu와 반대 방향.
# 새 파일: colorscale_diverging.pyimport plotly.express as pximport numpy as np# 성장률 데이터 (-30% ~ +30%)growth_data = np.random.uniform(-30, 30, (6, 6))fig = px.imshow( growth_data, color_continuous_scale="RdBu", color_continuous_midpoint=0, # 중간값을 0으로 title="발산형 컬러 스케일 (RdBu) - 성장률")fig.show()
실행하면 RdBu 발산형 컬러 스케일 히트맵이 나타납니다. 0을 기준으로 음수 값은 빨간색, 양수 값은 파란색으로 표시되어 성장률의 방향을 직관적으로 파악할 수 있습니다.
color_continuous_midpoint=0으로 중간값을 명시하면 0이 흰색, 양수는 파랑, 음수는 빨강으로 나뉩니다.
범주형 (Qualitative)
연속적인 값이 아니라 카테고리를 구분할 때 사용합니다. 막대 그래프, 산점도에서 그룹을 색으로 나눌 때입니다. 색들 사이에 순서나 크기 관계가 없어야 합니다.
Plotly: Plotly 기본 10색. 선명하고 구분이 뚜렷합니다.D3: D3.js 기본 팔레트. 차트 라이브러리에서 자주 쓰이는 색상들.Pastel: 파스텔 톤. 부드럽고 친근한 느낌.Safe: 색맹 친화적 팔레트.
# 새 파일: colorscale_qualitative.pyimport plotly.express as pxdf = px.data.gapminder().query("year == 2007")fig = px.scatter( df, x="gdpPercap", y="lifeExp", color="continent", color_discrete_sequence=px.colors.qualitative.D3, title="범주형 컬러 스케일 (D3) - 대륙별 구분", log_x=True)fig.show()
실행하면 D3 범주형 팔레트로 대륙을 구분한 산점도가 나타납니다. 5개 대륙이 서로 뚜렷하게 구분되는 색으로 표시되고, 마우스를 올리면 각 국가의 GDP와 기대수명을 확인할 수 있습니다.
컬러 스케일 확인하는 법
Plotly가 제공하는 모든 팔레트를 직접 확인할 수 있습니다.
# 새 파일: colorscale_list.pyimport plotly.express as px# 순차형 목록print("순차형:")print(dir(px.colors.sequential))# 발산형 목록print("\n발산형:")print(dir(px.colors.diverging))# 범주형 목록print("\n범주형:")print(dir(px.colors.qualitative))# 특정 팔레트의 색상 코드 확인print("\nViridis 색상:")print(px.colors.sequential.Viridis)print("\nD3 색상:")print(px.colors.qualitative.D3)
색맹 친화적 선택
색맹인 사용자를 배려할 때는 다음 팔레트가 안전합니다.
- 순차형:
Viridis,Cividis(가장 권장),Plasma - 범주형:
Safe,Colorblind(Okabe-Ito 기반) - 발산형:
RdBu(빨강과 파랑은 대부분의 색맹 유형에서 구분 가능)
빨강과 초록을 함께 쓰는 것은 적록색맹 사용자에게 두 색이 같아 보일 수 있어서 피하는 것이 좋습니다.
# 새 파일: colorblind_friendly.pyimport plotly.express as pxdf = px.data.iris()# Colorblind 팔레트 사용fig = px.scatter( df, x="sepal_width", y="sepal_length", color="species", color_discrete_sequence=px.colors.qualitative.Safe, title="색맹 친화적 팔레트 (Safe)")fig.show()
실행하면 Safe 팔레트가 적용된 붓꽃 산점도가 나타납니다. 색각이상 사용자도 세 종을 명확히 구분할 수 있는 색으로 표시됩니다.
컬러 스케일 선택 요약
| 데이터 특성 | 추천 컬러 스케일 | 예시 |
|---|---|---|
| 0 이상 연속값 | Viridis, Blues |
인구 밀도, 온도 |
| 음수와 양수 모두 | RdBu, RdGr |
수익률, 온도 편차 |
| 카테고리 구분 | D3, Plotly |
지역, 팀, 종류 |
| 색맹 배려 | Cividis, Safe |
공개 발표, 논문 |
지윤은 히트맵에는 RdBu를 쓰고, 산점도에서 대륙을 구분할 때는 D3를, 그리고 브랜드 색상 #1B3A5C가 들어간 막대 그래프에는 직접 색상을 지정하기로 했습니다. 색을 고르는 일도 분석의 일부라는 것을 처음 실감했습니다.