IDL/New Graphics

등위선(Contour) 그림의 각종 색상 설정 방법들 [2]

이상우_idl 2024. 3. 25. 16:46
728x90
반응형

지난 회차 게시물에서는 NG 체계에서 CONTOUR 함수를 사용하여 등위선 그림을 표출하는데 있어서 색상과 관련된 각종 속성들을 이용한 설정 방법에 관하여 살펴보았습니다. 여기서는 주로 등위선의 선(Line) 자체 및 문자들에 대한 색상 처리에 관하여 살펴보았는데요. 오늘은 이어지는 내용으로서 CONTOUR 함수를 사용하여 색상이 채워진 등위선(Filled Contour) 그림을 표출하는데 있어서 색상을 설정하는 방법에 관하여 살펴보고자 합니다. 그러면 지난 회차에서와 동일한 예제를 사용하여 기본적인 표출부터 먼저 해놓고 시작하겠습니다. 다만 여기서는 색상이 채워진 등위선의 형태로 표출하기 위하여 FILL 속성을 처음부터 사용하기로 합니다.

 

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, $

  /FILL, $
  TITLE='Filled Contour Color Test', AXIS_STYLE=2, $

  FONT_SIZE=11, MARGIN=0.1, /CURRENT)

 

참고로 FILL 속성은 등위선을 색상이 채워진 형태로 표출할 것인지 여부를 결정하는 역할을 하며, 그 값을 1로 설정하면 색상이 채워진 형태로 표출하게 되고 그렇지 않을 것이라면 0으로 설정(디폴트는 0)하면 됩니다. 다만 이 속성은 일종의 on/off 방식으로 작동하기 때문에 만약 색상이 채워진 등위선 형태로 표출하고자 할 경우에는 FILL=1로 표기해도 되지만 위와 같이 /FILL로 표기해도 효과는 동일합니다. 그리고 여기서는 FILL 속성을 사용하긴 했지만 기타 색상과 관련된 설정들은 일체 하지 않은 상태입니다. 표출 결과는 다음 그림과 같습니다.

 

 

이와 같이 주로 푸른색 계열의 색상들로 채워진 모습으로 등위선 그림이 표출됩니다. 사실 여기서 사용된 색상들도 그냥 디폴트 설정에 의하여 적용된 것인데요. 실제로 색상이 채워진 등위선의 표출에 있어서는 49번 컬러테이블의 색상들이 역순서로 사용되는 것이 디폴트 설정이기 때문에 위와 같이 보이게 됩니다. 그리고 등위선의 표출 대상 데이터는 지난 회차와 동일하며, 등위선이 그려지는 값들도 30, 50, 80, 100으로 역시 동일합니다. 따라서 49번 컬러테이블의 색상들의 순서가 뒤집어진 상태에서 IDL이 알아서 추출한 색상들이 사용되었습니다. 실제로 이 표출에서 사용된 컬러테이블의 모습과 각 색상이 추출된 위치들을 보면 다음과 같습니다.

 

 

결국은 이러한 방식의 표출에 있어서 유저가 원하는 색상들이 사용되도록 하려면 역시나 별도의 설정을 직접 해줘야 할 것입니다. 색상들을 직접 설정하는 방법은 지난 회차에서 언급된 방법들과 거의 유사합니다. 먼저 C_COLOR 속성을 사용하는 방법부터 사용해봅시다.

 

c = CONTOUR(data, C_VALUE=cvals, C_LABEL_SHOW=1, $

  /FILL, C_COLOR=['cyan', 'lime', 'orange', 'crimson'], $
  TITLE='Filled Contour Color Test', AXIS_STYLE=2, FONT_SIZE=11, $

  MARGIN=0.1, /CURRENT)

 

이렇게 하면 등위선으로 표시된 4개의 값들에 대하여 C_COLOR 속성에 명시된 색상들이 차례로 적용됩니다. 표출 결과는 다음 그림과 같습니다.

 

 

그 다음은 RGB_TABLE 속성을 사용하여 컬러테이블을 직접 지정하는 방법입니다. 즉 이렇게 하면 지정된 컬러테이블로부터 IDL이 알아서 적정 위치의 색상들을 추출하여 그림에 적용하게 됩니다. 다음은 34번 컬러테이블이 적용되도록 하는 경우입니다.

 

c = CONTOUR(data, C_VALUE=cvals, C_LABEL_SHOW=1, $

  /FILL, RGB_TABLE=34, $
  TITLE='Filled Contour Color Test', AXIS_STYLE=2, FONT_SIZE=11, $

  MARGIN=0.1, /CURRENT)

 

참고로 34번 컬러테이블의 모습 및 추출된 색상들의 위치는 지난 회차에서와 마찬가지이므로 여기서는 생략합니다. 표출 결과를 보면 다음 그림과 같습니다.

 

 

그리고 지정된 컬러테이블 내에서 추출될 색상들을 유저가 직접 선택하기 위하여 RGB_INDICES 속성을 사용하는 것도 물론 가능합니다.

 

c = CONTOUR(data, C_VALUE=cvals, C_LABEL_SHOW=1, $

  /FILL, RGB_TABLE=34, RGB_INDICES=[50, 100, 200, 250], $
  TITLE='Filled Contour Color Test', AXIS_STYLE=2, FONT_SIZE=11, $

  MARGIN=0.1, /CURRENT)

 

역시 여기서도 34번 컬러테이블의 모습 및 추출된 색상들의 위치는 지난 회차에서와 마찬가지이므로 여기서는 생략합니다. 표출 결과는 다음과 같습니다.

 

 

일단 색상이 채워진 등위선 그림의 표출에 있어서도 색상들을 제어하는 방식은 지난 회차 게시물에서 언급된 방법들과 동일하다고 보면 됩니다. 그런데 지금까지 표출된 등위선 그림들을 잘 보면 지난 회차에서 표출된 등위선 그림들과 중요한 차이점이 있는데요. 라벨 문자들이 보이지 않는다는 것입니다. 사실은 CONTOUR 함수에서 FILL 속성을 사용하여 색상이 채워진 등위선 그림을 표출하게 되면 등위선의 라벨 문자들 뿐 아니라 선(Line)들도 다 덮어씌워지게 된다는 것을 유의해야 합니다. 따라서 만약 이와 같이 색상이 채워진 등위선 그림을 표출하면서도 라벨 문자들 및 선들이 보이도록 하려면 그러한 특성을 갖는 등위선 그림을 별도로 그려서 중첩하는 것이 해결책이 될 수 있습니다. 즉 바로 위의 그림을 대상으로 이러한 작업을 추가해본다면 그 과정은 다음과 같습니다.

 

c = CONTOUR(data, C_VALUE=cvals, C_LABEL_SHOW=1, $

  /FILL, RGB_TABLE=34, RGB_INDICES=[50, 100, 200, 250], $
  TITLE='Filled Contour Color Test', AXIS_STYLE=2, FONT_SIZE=11, $

  MARGIN=0.1, /CURRENT)

co = CONTOUR(data, C_VALUE=cvals, C_LABEL_SHOW=1, $

  COLOR='black', C_THICK=2, /OVERPLOT)

 

이와 같이 CONTOUR 함수를 한번 더 사용해서 선과 라벨 문자가 표시되는 등위선을 덧그려주면 됩니다. 이 때 올바른 중첩을 위하여 반드시 /OVERPLOT 키워드를 사용해야 한다는 것을 유의해야 합니다. 표출 결과는 다음 그림과 같습니다.

 

 

그리고 한가지만 더 짚어보면 이러한 그림에서는 컬러바도 함께 표출되는 것이 좋을 것입니다. 그러려면 COLORBAR 함수를 사용하면 되는데, 그림의 하단에 수평 방향의 컬러바를 삽입하는 과정을 추가해보면 다음과 같습니다.

 

c = CONTOUR(data, C_VALUE=cvals, C_LABEL_SHOW=1, $

  /FILL, RGB_TABLE=34, RGB_INDICES=[50, 100, 200, 250], $
  TITLE='Filled Contour Color Test', AXIS_STYLE=2, FONT_SIZE=11, $

  MARGIN=0.1, /CURRENT)

co = CONTOUR(data, C_VALUE=cvals, C_LABEL_SHOW=1, $

  COLOR='black', C_THICK=2, /OVERPLOT)

cb = COLORBAR(POSITION=[0.2, 0.025, 0.8, 0.055], TAPER=0, /BORDER)

 

여기서 COLOBAR 함수의 내용을 보면 POSITION 키워드를 사용하여 하단에 수평 방향으로 컬러바가 표시되도록 위치 설정을 하였고 BORDER 속성을 사용하여 컬러바의 외곽선이 표시되도록 하였습니다. 그리고 등위선에 대한 컬러바를 표시하면 끝부분의 윤곽이 뾰족하게 보이도록 하는 것이 기본 설정이므로 TAPER 속성을 따로 사용하여 그냥 사각형의 윤곽이 되도록 하였습니다. 표출 결과는 다음 그림과 같습니다.

 

 

그리고 이렇게 컬러바를 삽입하는 것은 지난 회차에서 표출했던 등위선 그림들 즉 선과 라벨 문자들로 구성된 경우에 대해서도 동일하게 적용됩니다. 지난 회차 게시물에서 제시되었던 예제 코드를 활용하여 컬러바 삽입까지 구현해보면 그 과정은 대략 다음과 같습니다.

 

c = CONTOUR(data, C_VALUE=cvals, C_LABEL_SHOW=1, $
  RGB_TABLE=34, RGB_INDICES=[50, 100, 200, 250], $
  LABEL_COLOR='black', C_THICK=2, $
  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)
cb = COLORBAR(POSITION=[0.2, 0.025, 0.8, 0.055], TAPER=0, /BORDER)

 

이와 같이 선과 라벨 문자들로 구성된 등위선 그림과 함께 컬러바도 함께 추가한 표출 결과는 다음 그림과 같습니다.

 

 

결국 이러한 등위선 그림에서 컬러바는 등위선의 각각의 값에 대응되는 색상을 알려주는 역할이라고 보면 됩니다. 지금까지 2회에 걸쳐서 CONTOUR 함수로 표출되는 등위선 그림에서 각종 색상들의 설정을 위한 속성들의 역할을 정확히 파악하고 그 적절한 사용 방법에 관하여 관련 예제들과 함께 살펴보았습니다.

반응형