IDL/New Graphics

새로운 그래픽의 Contour 기능 소개 [1]

이상우_IDL 2011. 6. 14. 01:00
728x90
오늘은 IDL 8.0 버전부터 도입된 새로운 그래픽 함수들 중 CONTOUR 함수에 대하여 소개할까 합니다. 말 그대로 등위선(Contour) 그림을 그리는 기능을 수행합니다. 기존 Direct Graphics 체계에서도 CONTOUR라는 프로시저가 있긴 했지만, 새로운 그래픽 체계의 특성인 간단한 사용법과 깔끔한 그래픽 등의 장점을 이 CONTOUR 함수도 갖고 있습니다.

간단한 예제부터 살펴보기로 합시다. 다음과 같이 HANNING 함수를 사용하여 가상의 2차원 자료를 만들어봤습니다. 가로 및 세로 방향으로 300X300의 크기를 갖고, 값 자체의 범위는 0~110까지가 됩니다.

data = 110*HANNING(300, 300)


그리고 다음과 같이 WINDOW 함수를 사용하여 그래픽을 표출할 윈도우를 하나 만들어놓겠습니다.

win = WINDOW(window_title='Contour Example', dimensions=[500, 500])


이제 CONTOUR 함수를 사용하여 등위선 그림을 그려봅니다. 여기서 첫번째 인자는 당연히 앞서 정의한 2차원 배열자료가 되어야 합니다. 그리고 /CURRENT는 앞서 정의한 윈도우에 등위선 그림을 그리겠다는 의미입니다.

con = CONTOUR(data, C_VALUE=[20, 40, 60, 80, 100], C_LABEL_SHOW=1, /CURRENT)


그리고 C_VALUE, C_LABEL_SHOW라는 속성들이 보입니다. C_VALUE는 어떤 값들에 대하여 등위선을 그릴 것이냐를 명시해주는 역할을 하는데, 여기서는 20, 40, 60, 80, 100 등 총 5개의 값들에 대하여 등위선을 그리게 됩니다. 등위선을 그릴 때에는 아무래도 이렇게 값들을 지정해줘야 원하는 형태의 그림이 얻어집니다. 그리고 C_LABEL_SHOW는 이와 같은 각 값에 대한 등위선에 대하여 그리느냐(1) 마느냐(0)를 결정합니다. 지금과 같이 그냥 1로 주면 모든 값에 대한 선들을 그리겠다는 의미가 됩니다. 만약 [0, 1, 0, 1, 1]과 같이 지정해주면 20, 60 두 값에 대한 등위선은 그리지 않습니다. 어쨌든 위와 같이 CONTOUR 함수를 사용하면 다음과 같은 그림을 얻게 됩니다.


이제 몇몇 추가적인 속성들을 설정해보기로 하겠습니다. C_LINESTYLE은 선의 형태를 정하는 것인데 0이면 실선, 1이면 점선과 같은 방식입니다. C_THICK은 선의 두께인데 기본설정은 1이고 최대 10까지 설정 가능합니다. 이 두 속성만 다음과 같이 설정해보면, 등위선의 모습이 다음 그림과 같이 변하게 됩니다.

con.C_LINESTYLE = 1

con.C_THICK = 2



물론 CONTOUR 함수에서는 이외에도 많은 속성들을 사용할 수 있습니다. 이러한 속성들의 설정은 처음에 CONTOUR 함수를 사용할 때 설정해도 되고, 방금 봤던 것처럼 나중에 설정해도 됩니다. 물론 어떤 속성들은 처음에만 설정 가능한 경우도 있습니다. IDL 도움말에서 이 CONTOUR 함수에 대한 내용을 보면 속성들에 대한 설명에서 속성명 다음에 (Init)라고 써있는 경우가 바로 이러한 경우입니다. 그 외에 나중에 설정해도 되긴 하지만, 정말로 나중에 설정하면 실제로 그 효과가 안나타나는 경우도 있습니다. 이러한 속성의 경우는 알아서(?) 처음에 설정해줘야 그 효과가 나타납니다. 이런 속성 하나가 지금 하나 나옵니다. 바로 RGB_TABLE이라는 속성입니다. 이 속성에는 우리가 이미 알고 있는 컬러 테이블 번호를 부여할 수 있습니다. 그러면 등위선들에 대하여 해당 컬러테이블상의 색상을 순차적으로 입히게 됩니다. 앞서 사용했던 CONTOUR 함수의 내용에 다음과 같이 이 RGB_TABLE 속성을 추가하고 34라는 값을 부여해봅시다. 그러면 34번 컬러테이블상의 색상들을 사용하여 등위선을 다음 그림과 같이 표출하게 됩니다.

con = CONTOUR(data, C_VALUE=[20, 40, 60, 80, 100], C_LABEL_SHOW=1, RGB_TABLE=34, /CURRENT)



여기서 유의할 점은 컬러테이블이라는 것은 0~255의 인덱스 각각에 대하여 색상이 부여되어 있다는 점입니다. 하지만 이번 예제에서 사용중인 2차원 자료의 값의 범위는 0~110입니다. 따라서 이 상태라면 자료값의 범위인 0~110에 대해서 0~255의 색상값 범위가 스케일 조정을 통하여 적용됩니다. 즉, 자료값이 0이면 색상 인덱스는 0이고, 자료값이 110이면 색상 인덱스는 255가 됩니다. 물론 이러한 색상 인덱스 부여방식은 RGB_INDICES라는 속성을 추가로 사용하여 변경 가능합니다. 그래서 이 속성에 대하여 예를 들어서 [10, 20, 30, 40, 50]을 부여하면, 실제 34번 컬러테이블상에서 10, 20, 30, 40, 50번 색상 인덱스에 해당되는 색상들이 사용된다는 점 참고하시기 바랍니다.

위의 그림을 보면 각 등위선마다의 값을 나타내는 라벨들의 색상이 등위선의 색상을 그대로 따라나는 모습이 보입니다. 만약 라벨들 자체는 그냥 통일된 색상으로 따로 설정하고자 한다면, 다음과 같이 LABEL_COLOR라는 속성을 활용하면 됩니다. 여기서는 이 색상을 검정색으로 통일하였는데, 그 결과는 다음 그림과 같습니다.

con.LABEL_COLOR = 'Black'



그러면 오늘은 이 정도로 소개만 드리기로 하고, 다음번에는 색상이 가미된 등위선 그림을 좀 더 제대로 그리는 방법을 살펴보도록 하겠습니다.



LIST