iBetter Books
수정

컬러 스케일 선택 가이드

템플릿으로 전체 분위기는 잡았는데, 히트맵이나 지도처럼 연속적인 값을 색으로 표현하는 차트에서는 또 다른 선택이 필요했습니다. 컬러 스케일, 즉 수치가 높고 낮음에 따라 색이 어떻게 변하는지 결정하는 것입니다.

"그냥 예쁜 색 쓰면 안 되나요?"

지윤이 묻자 하은이 고개를 저었습니다. 하은은 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가 들어간 막대 그래프에는 직접 색상을 지정하기로 했습니다. 색을 고르는 일도 분석의 일부라는 것을 처음 실감했습니다.