ML/AI/SW Developer

Visualization-Color 활용

1. Color에 대한 이해

1.1 색이 중요한 이유

  • 위치와 색은 가장 효과적인 채널 구분
    • 위치는 시각화 방법에 따라 정해지지만,
    • 색은 우리가 직접 결정 해야한다

1.2 화려함이 시각화이 전부가 아니다!

  • 화려한 것은 매력적이지만, 정보를 담기 어려울 수 있다.
  • 시각화에서 가장 중요한 것은 정보를 전달하는 것!

1.3 색의 의미

  • 높은 온도에서는 파랑, 낮은 온도에는 빨강?
    • 어색하다!
  • 카카오에 초록색, 네이버에 노란색?
    • 역시 어색하다!
  • 기존의 정보와 느낌을 잘 활요하는 것이 중요!
    • 내가 잘 모르겠다면? 기존의 사례를 공부해 활용, 이미 사용되는 색들에는 이유가 있을것이다!

2. Color Palette의 종류

2.1 범주형

  • Discrete, Qualitative 등 다양한 이름 소유
  • 독립된 색상으로 구성되, 범주형 변수에 적용
  • 최대 10개까지 사용하는 것이 좋음, 그 이상은 기타로!
  • 색의 차이로 구분하는 것의 특징 (채도 명도 조정은 지양)

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

...

for idx, cm in enumerate(qualitative_cm_list): 
	...
	axes[idx].scatter(student_sub['math score'], student_sub['reading score'],
				 c=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)
	...

2.2 연속형

  • 순서형, 연속형 변수에 적용
  • 연속적인 색상(Gradient?)로 값을 표현
    • 어두운 배경에서는 밝은색, 밝은 배경에서는 어두운 색이 상대적으로 큰 값을 표현
  • 단일 색상 사용, 균일한 변화가 중요한

  • 예시
sequential_cm_list = ['Greys', 'Purples', 'Blues', 'Greens', 'Oranges', 'Reds',
            'YlOrBr', 'YlOrRd', 'OrRd', 'PuRd', 'RdPu', 'BuPu',
            'GnBu', 'PuBu', 'YlGnBu', 'PuBuGn', 'BuGn', 'YlGn']

...

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
		
		 )
    fig.colorbar(pcm, ax=axes[idx])
    axes[idx].set_title(cm)

2.3 발산형

  • 중앙을 기준으로 발산
    • 상반된 값
    • 서로 다른 2개의 값을 표현하는 것에 적합
  • 양 끝으로 갈수록 진해지도록 적용
  • 중앙 색은 양쪽의 점에서 편향되지 않아야 한다 (무채색일 필요는 없음)

  • 예시
diverging_cm_list = ['PiYG', 'PRGn', 'BrBG', 'PuOr', 'RdGy', 'RdBu',
            'RdYlBu', 'RdYlGn', 'Spectral', 'coolwarm', 'bwr', 'seismic']

...

for idx, cm in enumerate(diverging_cm_list):    
    pcm = axes[idx].scatter(student['math score'], student['reading score'],
					c=offset(student['math score']), 
					cmap=cm,
				 )
    cbar = fig.colorbar(pcm, ax=axes[idx], 
					ticks=[0, 0.5, 1], 
					orientation='horizontal'
				   )
    cbar.ax.set_xticklabels([0, student['math score'].mean(), 100])
	...

3. 그외 Tip

3.1 강조, 그리고 색상 대비

  • 차이를 강조하기 위해 Higlighting 기능 활용
  • 색상 대비도 강조효과 부여 가능
    • 명도대비: 밝은색 - 어두운색 (회색-검정)
    • 색상대비: 가까운 색은 차이가 더 크게 보임 (파랑-보라 빨강-보라)
    • 채도대비: 채도의 차이, 채도가 더 높아보임 (회색-주황)
    • 보색대비: 정반대 색상을 사용하면 더 선명해 보임 (빨강-초록)

3.2 색각이상

  • 색맹: 삼원색 중 특정 색을 감지 못하는 것
  • 색약: 부분적 인지 이상
  • 색 인지가 중요한 분야에 있어서는 이에 대한 고려가 필수!