본문 바로가기
컴퓨터/전산, 그 외

colormap 사용하기

by adnoctum 2013. 1. 24.




   colormap 은 pseudo coloring 을 할 때 사용하는 색상의 조합인데, 무턱대고 사용하는 것보다는 경우에 따라 적당한 것을 고르는 것이 합당하다. 이 글은 우선 python 의 matplotlib 에서 제공하는 colormap 을 살펴보고, color map 을 사용할 때의 주의점에 관한 논문을 살펴 본다. 그리고, 마지막으로 간단하게 두 가지 색으로 colormap 을 만들 때 RGB 코드 상으로 어떻게 하는지 살펴 본다. 


   matplotlib 은 python 에서 여러 종류의 그림을 matlap 처럼 쉽게 그릴 수 있게 해 주는 library 이다. 그 중 colormap 은 상당히 여러 종류가 있는데, 전체적으로는 다음 그림과 같다. 









위의 colormap 들을 각각의 그림 파일로 저장한 것은 아래에 있다. 




위 파일들을 모두 하나의 압축 파일에 집어 넣은 것은 다음에 있다. 



colorbars.zip



   주로 rainbow color map 을 자주 사용하는데, 이것은 그리 좋은 것은 아니라고 한다. IEEE 에 2007년에 나온 글을 첨부한다. 


Rainbow Color Map (Still) Considered Harmful.pdf



위 글에 나오는 내용을 아래에 살짝 요약한다. 


[미완]





RGB 코드로 R --> G 와 같은 단색으로 변경시킬 때는 단순히

RGB(0,255,0) ---> RGB(0,c,0) ---> RGB(0,0,0) --> RGB(c,0,0) --> RGB(255,0,0)

으로 하면 제일 녹색에서부터 어두워져서 가장 빨강색으로 변하게끔 색을 끌어 올 수 있다. c 의 값은 [0,255] 의 범위이다. 이 코드의 경우 정가운데는 검은색으로 나타나게 된다. 만약 중간색을 흰색으로 하고 싶다면 다음과 같은 방식을 사용한다. 


RGB(0,255,0) -->RGB(255-c,255,255-c) --> RGB(255,255,255) --> RGB(255,255-c,255-c) --> RGB(255,0,0);


역시 c 의 값은 [0,255] 범위이다. 











위를 C/C++ 코드로 보자면 다음과 같다. 



// 중간이 흰색. 
// v : [-1, +1]
COLORREF get_two_code_color(double v)
{
	int c = static_cast<int>(fabs(v)*255.0); 
	if(> 255) c = 255; 
	COLORREF cr = RGB(255,255-c,255-c);
	if(< 0) cr = RGB(255-c,255,255-c); 
 
	return cr; 
 
}
// 중간이 검은색. 
// v : [-1, +1]
COLORREF get_two_code_color2(double v)
{
	int c = static_cast<int>(fabs(v)*255.0); 
	if(> 255) c = 255; 
	COLORREF cr = RGB(c,0,0); 
	if(< 0) cr = RGB(0,c,0); 
 
	return cr; 
}


python 이나 delphi, java 등 RGB 에 다른 범위의 값을 사용하는 언어들은 적당히 변경하면 된다.