IDL의 NG 체계에서 등위선(Contour)의 표출에 사용되는 CONTOUR 함수를 보면 색상과 관련된 속성들이 여러 개 있습니다. IDL 도움말에서 CONTOUR 함수에 관한 섹션을 보면 이러한 속성들 즉 "COLOR"라는 문구가 붙은 것들이 몇 개 보이는데 정리해보면 대략 다음과 같습니다.
BACKGROUND_COLOR
C_COLOR
COLOR
LABEL_COLOR
FONT_COLOR
VERT_COLORS
그리고 이렇게 "COLOR"라는 문구가 붙은 속성들 외에도 색상과 관련된 기타 속성들이 몇 개 더 있습니다.
RGB_TABLE
RGB_INDICES
사실 이와 같이 명칭이 다소 헷갈리는 속성들이 있다보니 이들을 어떤 식으로 활용하면 되는가에 있어서 약간 혼란스럽게 느껴질 수도 있습니다. 따라서 오늘은 등위선 그림의 표출에 있어서 각종 색상 관련 속성들이 정확히 어떻게 사용되어야 하는가에 대하여 관련 예제들과 함께 자세히 살펴보고자 합니다. 먼저 가상의 2차원 예제 데이터를 생성하고 CONTOUR 함수를 사용하여 기본적인 표출부터 해봅시다. 그 과정은 다음과 같습니다.
data1 = FLTARR(600, 600)
data2 = FLTARR(600, 600)
data3 = FLTARR(600, 600)
data1[1:400, 1:400] = HANNING(400, 400)*100
data2[300:599, 300:599] = HANNING(300, 300)*120
data3[120:419, 300:599] = HANNING(300, 300)*90
data = TEMPORARY(data1) + TEMPORARY(data2) + TEMPORARY(data3)
win = WINDOW(DIMENSIONS=[600, 600], /NO_TOOLBAR)
cvals = [30, 50, 80, 100]
c = CONTOUR(data, C_VALUE=cvals, C_LABEL_SHOW=1, $
TITLE='Contour Color Test', AXIS_STYLE=2, FONT_SIZE=11, $
MARGIN=0.1, /CURRENT)
여기서는 600x600의 구조를 갖는 2차원 배열인 data를 생성하고 이를 CONTOUR 함수에 투입하여 등위선 그림이 표출되도록 하였습니다. 표출의 대상 데이터인 data 배열의 경우 값의 범위는 0~120입니다. 그리고 등위선으로 표시될 값들은 30, 50, 80, 100이 되도록 하였습니다. 다만 색상과 관련해서는 별도의 설정을 전혀 하지않고 그냥 디폴트로 처리되도록 하였습니다. 표출 결과는 다음 그림과 같습니다.
이 그림을 보면 등위선의 색상 처리에 있어서 CONTOUR 함수가 디폴트로 작동하는 방식을 알 수 있는데요. 이와 같이 등위선의 값에 따라 약간 브라운색 계열의 색상들로 차등적으로 적용된 것이 보입니다. 사실 정확히 얘기하면 55번 컬러테이블이 적용되면서 각 등위선의 값에 따라 적절한 위치의 색상이 적용되는 것이 디폴트 설정입니다. 즉 대상 데이터의 값 범위가 0~120이고 그 범위 내에서 30, 50, 80, 100이란 값의 위치에 맞는 색상들이 55번 컬러테이블에서 적절히 알아서 선택되어 적용된 것입니다. 55번 컬러테이블의 모습을 보면 다음과 같습니다.
물론 실제 유저 입장에서는 이 상태 그대로 색상 처리를 하게 되지는 않을 것입니다. 그러면 서두에서 언급된 색상 관련 설정들에 대한 사용법 및 그 효과를 지금부터 살펴보겠습니다. 먼저 COLOR 속성부터 봅시다. 이 속성을 사용하면 모든 등위선들을 단일 색상으로 처리하게 됩니다. 앞서 CONTOUR 함수가 사용된 내용을 다음과 같이 수정해봅시다.
c = CONTOUR(data, C_VALUE=cvals, C_LABEL_SHOW=1, $
COLOR='black', $
TITLE='Contour Color Test', AXIS_STYLE=2, FONT_SIZE=11, $
MARGIN=0.1, /CURRENT)
이와 같이 COLOR 속성에 대하여 특정한 색상을 명시하면 모든 등위선들이 그 색상으로 일괄 처리됩니다. 결과는 다음 그림과 같습니다.
따라서 모든 등위선들이 그 값에 상관없이 단일한 색상으로 표시되도록 하려면 COLOR 속성을 사용하면 됩니다. 그런데 COLOR 속성 말고도 C_COLOR 속성이 또 있습니다. C_COLOR 속성은 각 등위선의 색상을 개별적으로 직접 지정하는 역할을 한다는 점에서 COLOR 속성과는 다릅니다. 그러면 이번에는 COLOR 대신 C_COLOR 속성을 다음과 같이 사용해봅시다.
c = CONTOUR(data, C_VALUE=cvals, C_LABEL_SHOW=1, $
C_COLOR=['cyan', 'lime', 'orange', 'crimson'], $
TITLE='Contour Color Test', AXIS_STYLE=2, FONT_SIZE=11, $
MARGIN=0.1, /CURRENT)
여기서는 등위선으로 표시된 4개의 값들(30, 50, 80, 100)에 대하여 각각 cyan, lime, orange, crimson 색상이 적용되도록 하기 위하여 C_COLOR 속성을 사용하였습니다. 결과는 다음 그림과 같습니다.
이와 같이 C_COLOR 속성을 사용하면 각각의 등위선에 대하여 색상을 개별적으로 직접 지정할 수 있습니다. 그런데 이와 같이 각 등위선의 색상을 유저가 직접 지정하지 않고 특정한 컬러테이블을 기반으로 적절한 위치의 색상이 알아서 배정되도록 하는 것도 가능한데 이러한 설정을 위해서는 RGB_TABLE 속성을 사용하면 됩니다. 예를 들어 34번 컬러테이블의 색상들이 사용되도록 하려면 다음과 같이 처리하면 됩니다.
c = CONTOUR(data, C_VALUE=cvals, C_LABEL_SHOW=1, $
RGB_TABLE=34, $
TITLE='Contour Color Test', AXIS_STYLE=2, FONT_SIZE=11, $
MARGIN=0.1, /CURRENT)
이와 같이 적용하고자 하는 컬러테이블의 번호를 RGB_TABLE 속성에 부여하면 됩니다. 그 결과는 다음 그림과 같습니다.
이 그림에서 각 등위선마다 적용된 색상은 실제로 34번 컬러테이블 내에 있는 것들입니다. 여기서 잠시 우리가 맨 처음에 색상에 대한 설정을 전혀 하지 않고 그냥 디폴트로 처리되도록 했을 때 표출되었던 그림을 다시 떠올려봅시다. 그 때 디폴트 상태에서 55번 컬러테이블이 적용된다고 언급한 바 있습니다. 결국은 디폴트인 55번 컬러테이블 대신 유저가 원하는 컬러테이블을 직접 지정하고자 할 때 RGB_TABLE 속성을 사용하면 된다고 보면 됩니다. 실제로 위의 그림이 표출되는 과정에서 적용된 34번 컬러테이블의 모습을 보면 다음과 같습니다.
앞서 표출된 등위선 그림과 위의 34번 컬러테이블의 모습을 함께 보면 34번 컬러테이블 내에서 적절한 위치의 색상들이 추출되어 사용되었음을 확인할 수 있습니다. 그리고 위의 컬러바 그림에서는 검은 수직선 4개가 보이는데 이것은 좀전에 표출된 등위선 그림에서 사용된 4종의 색상들이 추출된 위치를 나타냅니다. 이러한 위치 선정은 IDL이 "적당히 알아서" 한 것입니다(다만 그 정확한 규칙은 IDL 도움말에도 명시되어 있지는 않습니다). 그런데 이와 같이 RGB_TABLE 속성을 통하여 특정한 컬러테이블로부터 각 등위선에 대한 색상이 "적당히 알아서" 추출되도록 하는 대신 컬러테이블로부터 추출될 색상을 유저가 직접 지정하는 것도 가능합니다. 이를 위해서는 RGB_INDICES 속성을 함께 사용하면 됩니다. 예를 들어 등위선으로 표시될 30, 50, 80, 100이란 값들에 대하여 34번 컬러테이블의 50, 100, 200, 250번 인덱스의 색상이 사용되도록 하려면 다음과 같이 처리하면 됩니다.
c = CONTOUR(data, C_VALUE=cvals, C_LABEL_SHOW=1, $
RGB_TABLE=34, RGB_INDICES=[50, 100, 200, 250], $
TITLE='Contour Color Test', AXIS_STYLE=2, FONT_SIZE=11, $
MARGIN=0.1, /CURRENT)
이와 같이 34번 컬러테이블 내에서 사용하고자 하는 색상의 인덱스 번호들로 구성된 배열을 RGB_INDICES 속성에 직접 부여하면 됩니다. 그 결과는 다음 그림과 같습니다.
그리고 이 때 34번 컬러테이블에서 추출된 색상들의 인덱스별 위치를 참조해보면 다음과 같습니다. 당연히 앞서 RGB_INDICE 속성에 명시한 인덱스 번호들에 해당되는 색상들이 추출되었음을 알 수 있습니다.
따라서 위의 두 그림을 비교해보면 RGB_INDICES 속성에서 설정된 위치의 색상들이 34번 컬러테이블로부터 추출되어 적용되었음을 확인할 수 있습니다. 물론 RGB_TABLE 속성으로 컬러테이블만 직접 지정하는 정도로도 충분할 수 있지만, 혹시라도 그 컬러테이블 내에서 사용하고자 하는 색상들까지 직접 지정하고자 할 경우에는 이러한 방법을 사용하면 됩니다. 그리고 위의 등위선 표출 그림들을 잘 보면 등위선 자체의 색상 뿐 아니라 각 등위선의 값을 나타내는 라벨 문자들의 색상이 각 등위선과 연동되어 처리된 것이 보이는데요. 만약 라벨 문자들에 대해서만 별도로 색상을 설정하고자 한다면 LABEL_COLOR 속성을 사용하면 됩니다. 예를 들어 위의 등위선 표출 그림에서 라벨 문자들만 검정색으로 표시하려면 다음과 같이 처리하면 됩니다.
c = CONTOUR(data, C_VALUE=cvals, C_LABEL_SHOW=1, $
RGB_TABLE=34, RGB_INDICES=[50, 100, 200, 250], $
LABEL_COLOR='black', $
TITLE='Contour Color Test', AXIS_STYLE=2, FONT_SIZE=11, $
MARGIN=0.1, /CURRENT)
이와 같이 처리하면 라벨 문자들에 한해서만 LABEL_COLOR 속성에 부여된 색상으로 표시됩니다. 표출 결과를 보면 다음 그림과 같습니다.
그런데 LABEL_COLOR 속성 말고도 FONT_COLOR 속성도 존재합니다. 그 명칭으로 봐서는 이것도 문자의 색상 처리와 관련된 역할로 보이긴 합니다. 사실 FONT_COLOR 속성의 경우는 등위선 그림에서 표시되는 모든 문자들을 대상으로 색상을 설정하는 역할을 합니다. 즉 라벨 문자는 물론이고 각 축의 눈금 문자 및 타이틀 문자까지 모두 일괄적으로 색상을 설정하게 됩니다. 그러면 라벨 문자에 대해서만 보면 LABEL_COLOR 속성과 그 역할이 겹치게 됩니다. 만약 둘이 맞붙을 경우 즉 두 속성을 동시에 사용할 경우에는 FONT_COLOR가 이깁니다. 즉 FONT_COLOR 속성의 설정이 우선적으로 적용된다는 의미입니다. 예를 들어서 다음과 같이 두 속성을 동시에 사용해봅시다.
c = CONTOUR(data, C_VALUE=cvals, C_LABEL_SHOW=1, $
RGB_TABLE=34, RGB_INDICES=[50, 100, 200, 250], $
LABEL_COLOR='black', $
FONT_COLOR='magenta', $
TITLE='Contour Color Test', AXIS_STYLE=2, FONT_SIZE=11, $
MARGIN=0.1, /CURRENT)
결과는 다음 그림과 같습니다.
이와 같이 LABEL_COLOR 속성에 설정된 색상은 무시되고 FONT_COLOR 속성에 설정된 색상이 모든 문자들에 적용된 것을 볼 수 있습니다. 따라서 이러한 혼란을 막기 위해서는 라벨 문자들은 LABEL_COLOR 속성으로 설정하고 각 축에 대해서는 [XYZ]COLOR 및 [XYZ]TEXT_COLOR 속성을 별도로 사용하는 것이 좋을 수도 있습니다. 그리고 타이틀 문자의 경우는 CONTOUR 함수의 TITLE 속성으로 표시하기 보다는 그냥 TEXT 함수를 따로 사용하여 처리하는 것이 더 나을 수도 있습니다. 예를 든다면 다음과 같은 방식으로 각종 문자들 및 X, Y축의 색상을 처리해볼 수도 있을 것입니다.
c = CONTOUR(data, C_VALUE=cvals, C_LABEL_SHOW=1, $
RGB_TABLE=34, $;RGB_INDICES=[50, 100, 200, 250], $
LABEL_COLOR='black', $
XCOLOR='green', YCOLOR='green', $
XTEXT_COLOR='blue', YTEXT_COLOR='blue', $
AXIS_STYLE=2, FONT_SIZE=11, MARGIN=0.1, /CURRENT)
tx = TEXT(0.5, 0.94, 'Contour Color Test', COLOR='purple', $
ALIGNMENT=0.5, FONT_SIZE=16, /NORMAL)
일단 오늘 내용은 여기까지 진행합니다. 오늘 소개된 내용은 등위선의 선(Line) 자체를 색상으로 나타내는 경우에 관한 것이었는데요. 등위선들의 사이 공간을 색상으로 채우는 경우도 있습니다. 즉 색상이 채워진 등위선(Filled Contour)을 표출하게 되는 경우도 많습니다. 이러한 경우의 색상 처리 방법에 관해서는 다음 회차에서 이어서 소개해보도록 하겠습니다.
'IDL > New Graphics' 카테고리의 다른 글
그래픽 창의 위치를 직접 제어하는 방법 (0) | 2024.05.09 |
---|---|
등위선(Contour) 그림의 각종 색상 설정 방법들 [2] (0) | 2024.03.25 |
다수의 그림들에 대한 OVERPLOT 및 TARGET의 활용법 (0) | 2024.03.12 |
축의 라벨 문자들의 회전 처리 (2) | 2024.02.05 |
데이터 포인트들을 다양한 색상으로 표출하기 [2] (0) | 2023.07.31 |