728x90
지난번에 이어서 오늘은 좀 더 컬러풀한 등위선(Contour) 그림을 CONTOUR 함수를 이용하여 그리는 법을 살펴보겠습니다. 이를 위하여 먼저 윈도우 하나를 WINDOW 함수를 이용하여 만들고, 예제용 2차원 자료를 HANNING 함수로 만드는 부분은 지난번과 같습니다.
win = WINDOW(window_title='Contour Example', dimensions=[500, 500])
data = 110*HANNING(300, 300)
이제 이 2차원 자료를 대상으로 다음과 같이 CONTOUR 함수를 이용하여 그림을 그립니다. 이 과정 역시 지난 게시물에서의 예제와 같습니다.
con = CONTOUR(data, C_VALUE=[20, 40, 60, 80, 100], C_LABEL_SHOW=1, RGB_TABLE=34, /CURRENT)
이제 이 등위선 그림의 속성들 중 FILL이라는 속성을 다음과 같이 설정합니다. 그러면 등위선 자체만을 컬러로 표시하는데 그치지않고 선과 선 사이의 공간을 해당 색상으로 채워줍니다. 그러면 다음 그림과 같은 결과를 얻게됩니다.
con.FILL = 1
그런데 우리가 지금 사용중인 34번 컬러테이블의 색분포를 잠시 살펴봅시다. 그 색분포는 다음 그림과 같습니다. 그리고 앞서 그렸던 색상이 채워진 등위선 그림을 보면 가운데 부분이 흰색으로 비어있는 것이 보입니다. 34번 컬러테이블상에서 분명히 흰색은 존재하지 않는데도 말이죠.
이것은 IDL에서 등위선 그림을 그릴 때 FILL 속성을 사용하여 색을 채우도록 할 경우, C_VALUE에 지정된 값들 사이사이만을 적당한 색간격으로 채우도록 되어 있기 때문입니다. 그래서 100보다 큰 값에 해당되는 부분은 어떤 "사이"에 해당되는 부분이 아니기 때문에 색을 채우지않고 그냥 빈 공간으로 남겨둔 것입니다. 해결방법은 간단합니다. C_VALUE에서 맨 끝부분에 다음과 같이 해당 2차원 자료의 최대값을 추가하면 됩니다. 그러면 100과 최대값(110) 사이에 대해서도 색상이 부여됩니다. 그 결과는 다음 그림과 같습니다.
이제 색상은 다 채워졌습니다. 그런데 이 그림상의 색상 분포를 보면 가운데의 값이 높은 부분에서 초록색과 옅은 노란색 사이의 대비효과가 그리 두드러지지 않습니다. 이왕이면 컬러테이블상에서 끝부분에 있는 빨간색이 들어가면 좋을텐데 말이죠. 이것은 색상이 채워진 등위선 그림을 그릴 경우 컬러테이블상에서 일정 간격으로 색상을 추출하여 각 구간에 적용하기 때문입니다. 따라서 등위선 사이사이를 채우는 색상의 번호를 직접 지정하는 것이 좋을 것 같습니다. 이 경우 C_COLORS라는 속성을 사용합니다. 다음과 같이 이 속성을 사용하여 색상을 직접 부여해봅시다. 특히 가장 값이 높은 부분에서는 빨간색이 사용될 수 있도록 합니다. 그러면 그 결과는 다음 그림과 같습니다.
con.C_COLOR = [50, 90, 140, 210, 250]
이제 등위선상의 색상의 분포도 원하는대로 되었습니다. 그런데 그림을 보면 등위선 자체나 라벨 등은 전혀 보이질 않습니다. 이것은 FILL 속성을 사용하여 색상을 채우게 되면 선이나 라벨들을 다 덮어버리기 때문입니다. 따라서 선과 라벨 등을 제대로 나타내기 위해서는 다음과 같이 FILL 속성을 사용하지 않은 새로운 등위선 그림을 중첩하여 그리면 됩니다. 여기서 새로운 등위선 그림을 생성할 때 CONTOUR 함수에 /OVERPLOT 속성이 들어가야 함을 유의하면 됩니다.
con1 = CONTOUR(data, C_VALUE=[20, 40, 60, 80, 100, MAX(data)], C_LABEL_SHOW=1, /OVERPLOT)
그리고 이 새로운 등위선 그림에 대하여 지난회 게시물에서와 같이 선의 형태나 라벨 문자의 폰트 스타일 등의 속성들을 다음과 같이 조절해주면 다음 그림과 같은 결과를 얻을 수 있습니다.
con1.C_LINESTYLE = 1
con1.C_THICK = 2
con1.LABEL_COLOR = 'Black'
con1.FONT_STYLE = 1
지금까지 색상이 채워진 등위선 그림을 그리는 방법을 살펴보았습니다. 핵심은 색이 채워진 등위선 그림을 먼저 그리고, 그 위에 색이 안채워진 그림을 중첩해서 그려야 선이나 라벨 등을 제대로 표시할 수 있다는 것이므로, 이 점만 유념하면 되겠습니다. 다음번에는 지도상에 등위선 그림을 중첩하여 그리는 방법을 살펴보기로 하겠습니다.
LIST
'IDL > New Graphics' 카테고리의 다른 글
새로운 그래픽의 Contour 기능 소개 [3] (2) | 2011.06.27 |
---|---|
새로운 그래픽 체계의 그림 저장 기능 (0) | 2011.06.22 |
IDL 8.1로 만들어본 MP4 동영상입니다 (0) | 2011.06.16 |
새로운 그래픽의 Contour 기능 소개 [1] (0) | 2011.06.14 |
새로운 그래픽의 Plot 기능 소개 [3] (0) | 2011.06.06 |