IDL/New Graphics

CONTOUR 함수에서 라벨 문자 변경하기

이상우_IDL 2013. 5. 9. 16:18
728x90

NG체계에서 사용되는 CONTOUR 함수는 기존 DG 체계에서 사용되던 CONTOUR 프로시저의 부가기능들과 유사한 기능들을 대부분 포함하고 있습니다. 그런데 얼마전에 어떤 IDL 사용자께서 CONTOUR 함수와 관련하여 주셨던 질문이 있어서 이 내용을 토대로 간단한 글을 올려볼까 합니다. DG체계의 CONTOUR 프로시저의 키워드중에 C_ANNOTATION이란 것이 있습니다. 이 키워드는 그려진 등치선마다 매겨지는 라벨 문자를 내맘대로 바꿀 수 있는 기능을 수행합니다. 다음은 2차원 예제 데이터를 생성하고 내가 원하는 값들에 해당되는 등치선들을 그리게 하는 예제입니다. 이 예제 데이터는 0~100의 범위의 값을 갖는데, 등치선은 10, 40, 60, 80이란 값에 대하여 그리도록 해봤습니다. 그 결과는 아래 그림과 같습니다. 이 그림을 보면, 등치선을 그렸을 때 각 선마다 붙는 라벨은 그 선에 해당되는 값을 나타내는 숫자가 됩니다.


data = HANNING(300, 300)*100

DEVICE, DECOMPOSED=0

WINDOW, XSIZE=500, YSIZE=400, RETAIN=2

CONTOUR, data, LEVELS=[10, 40, 60, 80], C_LABELS=[1, 1, 1, 1], COLOR=0, BACKGROUND=255




그런데 이 라벨 문자를 내 맘대로 바꾸기 위하여 다음과 같이 C_ANNOTATION 키워드를 사용하여 A, B, C, D를 라벨 문자로 대체해보았습니다. 그러면 결과는 위의 그림과 같이 나옵니다.


CONTOUR, data, LEVELS=[10, 40, 60, 80], C_LABELS=[1, 1, 1, 1], C_ANNOTATION=['A', 'B', 'C', 'D'], COLOR=0, BACKGROUND=255


그런데 여기서 궁금한 것은 NG체계의 CONTOUR 함수에서 이러한 C_ANNOTATION과 같은 역할을 하는 속성이 무엇이냐입니다. 사실 IDL 도움말에서 CONTOUR 함수에 관한 내용을 찾아봐도, 딱히 찾아지지는 않습니다. 앞서 언급된 어떤 IDL 사용자의 질문도 이러한 내용이었습니다. 그래도 좀 더 찬찬히 살펴본 결과 C_LABEL_OBJECTS라는 속성이 이러한 역할을 할 수 있는 것으로 확인이 되었습니다. 그래서 CONTOUR 함수에서 이와 같이 등치선의 라벨을 내가 원하는 문자로 대체하는 방법은 다음 예제 코드와 같고, 그 결과 그림은 아래와 같습니다.


c = CONTOUR(data)

c.C_LABEL_SHOW = 1

c.C_VALUE = [10, 40, 60, 80]

c.COLOR = 'black'

c.C_LABEL_OBJECTS = OBJ_NEW('IDLgrText', ['A''B''C''D'])


다만 코드의 내용에서 C_LABEL_OBJECTS에 부여된 문자열이 그냥 단순히 문자들로 구성된 배열로 주어진 것이 아니고 IDLgrText 클래스의 객체(Object)의 형태로 주어진 것을 볼 수 있습니다. 이것은 C_LABEL_OBJECTS 속성에 부여될 수 있는 값이 이와 같은 객체로 된 것만 가능하기 때문입니다. 그래서 라벨 문자의 대체작업을 이런 식으로 해야 한다는 것이 물론 지금 소개된 예제 코드를 그대로 따라서 하면 되는 것이긴 하지만, 갑작스레 객체의 개념이 등장해야 한다는 점을 감안한다면 이런 방법이 아주 사용자 친화적인 상황이라고 볼 수는 없을 것 같습니다. 그래서 진짜 C_ANNOTATION에 해당되는 속성이 CONTOUR 함수에 있는데 우리가 못찾은 것인지, 아니면 따로 없지만 그냥 이와 같이 C_LABEL_OBJECTS 속성으로 당분간 때우면 되는 것인지에 대해서는 저도 매우 궁금해서 본사 기술팀에 문의를 넣어본 상태입니다. 뭔가 답이 온다면 이 글의 댓글에 다시 올리도록 하겠습니다.

LIST