우리가 플롯을 그릴 때 각각의 점(point)을 서로 다른 색상으로 표시하고 싶은 경우가 있을 수 있습니다. 물론 이와 같은 표출방식은 기존의 DG(Direct Graphics) 체계에서도 가능은 하지만, 오늘은 NG(New Graphics) 체계에서의 구현방법부터 소개하기로 합니다. NG체계에서는 플롯을 그릴 때 사용되는 PLOT 함수의 기능들 중 VERT_COLORS라는 속성을 사용하여 구현이 가능합니다. 예를 들기 위하여 다음과 같이 랜덤값들로 이루어진 data라는 1차원 배열을 PLOT 함수로 그려봅시다.
data = RANDOMU(seed, 100) * 10; random values in 0~10 range
p = PLOT(data, SYMBOL='circle', /SYM_FILLED, LINESTYLE=6)
그러면 다음 그림과 같은 모습의 플롯을 얻게 됩니다.
만약 이 플롯상에서 Y축의 값이 3보다 작은 점들만 골라 파란색으로 표현하려면 어떻게 하면 될까요? 여기서 VERT_COLORS라는 속성이 등장합니다. IDL 도움말에도 나와있지만 이 속성에 대해서는 RGB 컬러값들로 이루어진 3xN의 크기를 갖는 배열을 부여하면 됩니다. 따라서 먼저 이 속성에 부여할 vcolors라는 배열을 다음과 같이 먼저 정의합니다.
vcolors = BYTARR(3, N_ELEMENTS(data)); array to contain RGB triples for vert colors
그리고 data 배열상에서 3보다 작은 값을 갖는 경우들을 WHERE 함수로 찾고, 이렇게 찾은 인덱스들을 이용하여 vcolors 배열상의 해당 컬러값을 파란색에 해당되는 RGB값인 [0, 0, 255]로 대체합니다. 이렇게 처리된 vcolors를 VERT_COLORS 속성에 부여하면 됩니다. 그러면 다음 그림과 같은 모습의 플롯을 얻게 됩니다.
ww = WHERE(data LT 3, count); range 1 (~3)
IF count NE 0 THEN FOR i = 0, count-1 DO vcolors[*, ww[i]] = [0, 0, 255]
p.VERT_COLORS = vcolors
그러면 내친김에 3~7의 범위에 대해서는 초록색, 7보다 큰 범위에 대해서는 빨간색을 부여해보는 것도 같은 요령으로 가능하겠지요? 즉, 다음과 같이 각 범위에 해당되는 컬러값들을 vcolors에 대입해준 다음 이를 다시 VERT_COLORS 속성에 부여하면 다음 그림과 같은 결과를 얻을 수 있게 됩니다.
ww = WHERE(data GE 3 AND data LT 7, count); range 2 (3~7)
IF count NE 0 THEN FOR i = 0, count-1 DO vcolors[*, ww[i]] = [0, 255, 0]
ww = WHERE(data GE 7, count); range 3 (7~)
IF count NE 0 THEN FOR i = 0, count-1 DO vcolors[*, ww[i]] = [255, 0, 0]
p.VERT_COLORS = vcolors
p.TITLE = 'Plot with Colored Vertices'
이와 같은 방법을 사용하면 Scatter 플롯 등을 비롯한 각종 플롯상에서 각 포인트의 색상을 다르게 부여함으로써 좀 더 직관적인 가시화가 가능할 것입니다. 여기 소개된 내용을 담은 예제코드도 함께 첨부합니다.
'IDL > New Graphics' 카테고리의 다른 글
NG 체계에서 날짜 기반의 플롯 그리기 (0) | 2013.01.02 |
---|---|
NG에서 Erase 메서드의 사용 (0) | 2012.07.16 |
영상의 화소값을 도식적으로 표출해보자~ (0) | 2011.12.21 |
SWx Monitor의 플롯 생성 루틴 소개 [2] (0) | 2011.12.19 |
SWx Monitor의 플롯 생성 루틴 소개 [1] (0) | 2011.12.15 |