Data Visualization - Color

홍찬우·2023년 7월 23일
0

Color

위치와 색은 가장 효과적인 구분
화려한 것은 매력적이나, 가장 중요한 것은 독자에게 원하는 인사이트 전달

  • 색에 대한 기존 정보와 느낌을 잘 활용하는 것이 중요

Color Pallete

범주형

  • 독립된 색상으로 구성되어 범주형 변수에 사용
  • 최대 10개의 색상 사용


연속형

  • 연속적인 색상을 사용하여 값 표현
  • 어두운 배경에는 밝은 색, 밝은 배경에는 어두운 색이 큰 값 표현


발산형

  • 연속형과 유사하지만 중앙값을 기준으로 발산
  • 상반된 값(e.g., 기온) 표현에 적합
  • 양 끝으로 갈수록 진해짐
  • 중앙색은 양쪽 색에 편향되어서는 안 됨


강조, 색상 대비

데이터에서 다름을 보이기 위해 highlighting


색각 이상

색맹, 색약
색 인지가 중요한 분야에서는 이를 고려하는 것이 필수




실습

색상 이해하기

rgb보다 hsl을 이해하는 것이 중요

  • Hue(색조) : 빨강, 파랑, 초록 등 색상으로 생각하는 부분
    • 빨강에서 보라색까지 있는 스펙트럼에서 0-360으로 표현
    • 색조 차이가 클수록 빠르게 구분 가능
  • Saturate(채도) : 무채색과의 차이
    • 선명도라고 볼 수 있음 (선명하다와 탁하다)
  • Lightness(광도) : 색상의 밝기

  • 기존에 나와있는 다양한 color pallete가 존재

범주형 색상

print(plt.cm.get_cmap('tab10').colors)
# ((0.12156862745098039, 0.4666666666666667, 0.7058823529411765), (1.0, 0.4980392156862745, 0.054901960784313725), (0.17254901960784313, 0.6274509803921569, 0.17254901960784313), ··· )
  • tab10 : 기본 색상 10가지
  • plt.cm.get_cmap('tab10').colors 색상의 rgb값을 뽑아냄

from matplotlib.colors import ListedColormap

qualitative_cm_list = ['Pastel1', 'Pastel2', 'Accent', 'Dark2', 
												'Set1', 'Set2', 'Set3', 'tab10']

for idx, cm in enumerate(qualitative_cm_list):    
    pcm = axes[idx].scatter(student_sub['math score'], 
										student_sub['reading score'],
                    color=student_sub['color'], 
										cmap=ListedColormap(plt.cm.get_cmap(cm).colors[:5]))

    cbar = fig.colorbar(pcm, ax=axes[idx], ticks=range(5))
    cbar.ax.set_yticklabels(groups)
    axes[idx].set_title(cm)
  • qualitative_cm_list : matplotlib에서 제공하는 color pallete 일부를 list에 저장
  • scatter() 에 cmap을 이용해 color map 지정
  • cmap=ListedColormap(plt.cm.get_cmap(cm).colors[:5])
    • color pallete 상위 5개를 사용할 수 있도록 변환
  • fig.colorbar plot 오른쪽의 color bar


연속형 색상

for idx, cm in enumerate(sequential_cm_list):    
    pcm = axes[idx].scatter(student['math score'], student['reading score'],
                            c=student['reading score'], 
                            cmap=cm,
                            vmin=0, vmax=100)
  • vmin, vmax로 색상 최소, 최대값 설정
    • vmin보다 작으면 최소 색상, vmax보다 크면 최대 색상으로 됨

  • imshow
    im = np.arange(100).reshape(10, 10)
    fig, ax = plt.subplots(figsize=(10, 10))
    ax.imshow(im)

  • 연속적인 색상으로 이미지 표현 가능

발산형 색상

from matplotlib.colors import TwoSlopeNorm
offset = TwoSlopeNorm(vmin=0, vcenter=student['reading score'].mean(), vmax=100)
  • TwoSlopeNorm은 기준을 잡고 양쪽을 정규화 시켜줌
    • 학생 읽기 성적 평균을 vcenter로 놓으면,
    • 0점 ~ 평균점수는 0 ~ 0.5 사이로 정규화하고, 평균점수 ~ 100점은 0.5 ~ 1로 정규화

  • 66.089가 평균 점수이며, 해당 점수에서 색이 거의 흰색으로 옅음
  • 양 끝으로 멀어질수록 색이 진해짐

명도 대비

  • group A를 강조하기 위해 명도 대비 이용
  • 산점도의 경우, zorder를 이용해 검은색 점을 맨 앞으로 가져와 더 부각시킬 수 있음

채도 대비


보색 대비







※ 모든 이미지 및 코드 출처는 네이버 커넥트재단 부스트캠프 AI Tech 5기입니다. ※

profile
AI-Kid

0개의 댓글