VECTOR 함수로 바람깃(Wind Barb) 표시하기 [2]
IDL에서 벡터들을 가시화하기 위하여 사용하는 VECTOR 함수는 벡터들을 화살표 형태로 표시할 수 있을 뿐 아니라 기상 분야에서 자주 사용되는 바람깃(Wind Barb)의 형태로 표시하는 기능도 함께 지원합니다. 그래서 VECTOR 함수를 이용하여 벡터들을 바람깃의 형태로 표출하는 방법을 관련 예제와 함께 지난 회차 게시물에서 소개한 바 있습니다. 오늘은 이어지는 내용으로서 바람깃들을 단일 색상으로 표시하는 대신 컬러테이블을 적용하여 다양한 색상으로 표시하는 방법을 살펴보도록 하겠습니다.
먼저 가상의 바람 데이터를 생성 및 정의하는 과정은 지난번과 동일합니다. 일단 다음과 같은 내용으로 시작해봅시다.
x = [20, 30, 60, 80]
y = [50, 40, 30, 70]
u = [2.1, 11.6, -6.3, 5.9]
v = [-3.2, 17.4, -9.8, 3.6]
ws = SQRT(u^2+v^2)
ukn = u*1.944
vkn = v*1.944
wskn = ws*1.944
PRINT, wskn
이와 같이 처음 생성된 u, v 데이터가 m/s 단위라고 가정하고 이를 노트(knot) 단위로 변환하는 과정까지 진행합니다. 출력된 노트 단위의 풍속값들은 다음과 같습니다.
7.44072 40.6533 22.6482 13.4361
그 다음 표출의 과정도 VECTOR 함수 및 SCATTERPLOT 함수를 사용하는 기본적인 틀은 지난번과 유사합니다. 물론 컬러를 적용하는 작업이라는 특성상 약간의 차이점은 있습니다. 그러면 먼저 그래픽창을 띄우고 VECTOR 함수를 사용하는 내용을 보면 다음과 같습니다.
win3 = WINDOW(DIMENSIONS=[600, 600], /NO_TOOLBAR)
vec3 = VECTOR(ukn, vkn, x, y, AXIS_STYLE=2, THICK=3, $
COLOR='crimson', XRANGE=[0, 100], YRANGE=[0, 100], $
VECTOR_STYLE=1, HEAD_SIZE=2, $
DATA_LOCATION=2, LENGTH_SCALE=2, $
RGB_TABLE=34, AUTO_COLOR=1, AUTO_RANGE=[0, 40], $
FONT_SIZE=11, MARGIN=0.1, /CURRENT)
여기서는 지난번과 달라진 부분을 볼드체로 표시하였습니다. 먼저 RGB_TABLE 속성에 컬러테이블 번호를 부여합니다. 그리고 AUTO_COLOR 속성의 값을 1로 설정하는 것이 가장 중요합니다. 이 속성은 디폴트 값이 0이며 그 상태에서는 컬러테이블이 전혀 반영되지 않습니다. 1로 설정할 경우에는 풍속의 크기에 따라 컬러테이블의 색상들이 반영되며, 2로 설정할 경우에는 그 기준이 풍향이 됩니다. 여기서는 풍속을 기준으로 할 것이기 때문에 1로 설정한 것입니다. 그리고 컬러테이블의 색상들이 반영될 기준 범위를 AUTO_RANGE 속성으로 설정해야 합니다. 앞서 보았던 노트 단위의 풍속 값들의 범위를 감안하여 위와 같이 0~40이 되도록 설정하였습니다. 일단 여기까지의 과정에 의하여 표출된 그림을 보면 다음과 같습니다.
이 그림을 보면 34번 컬러테이블의 색상들이 풍속의 크기에 따라 반영된 것을 볼 수 있습니다. 다음은 SCATTERPLOT 함수를 사용하여 각 지점의 위치에 원형 기호를 표시할 차례인데, 여기서도 위와 동일한 방식으로 컬러테이블을 적용하여 색상을 입히는 것이 필요할 것 같습니다. 물론 이 과정도 지난번과는 좀 다른데, 그 내용은 다음과 같습니다.
sp3 = SCATTERPLOT(x, y, SYMBOL='circle', $
/SYM_FILLED, SYM_COLOR='crimson', $
RGB_TABLE=34, MAGNITUDE=BYTSCL(wskn, MIN=0, MAX=40), $
/OVERPLOT)
여기서는 먼저 RGB_TABLE 속성으로 컬러테이블을 설정합니다. 그리고 중요한 것이 색상이 반영될 기준 범위를 설정하는데 있어서 MAGNITUDE 속성을 사용해야 한다는 것입니다. 그 방식은 위와 같이 노트 단위의 풍속 값들인 wskn에 대하여 BYTSCL 함수를 적용하여 0~40의 범위로 바이트스케일링 처리를 한 결과를 MAGNITUDE 속성에 부여하는 방식으로 처리하면 됩니다. 즉 컬러테이블의 색상을 반영할 때 기준 범위를 설정하는데 있어서 VECTOR 함수와 SCATTERPLOT 함수의 처리 방식이 서로 다르다는 점을 유념할 필요가 있습니다. 어쨌든 이러한 과정까지 진행을 하면 다음과 같은 그림을 얻게 됩니다.
이제 컬러테이블의 색상과 풍속 값의 대응 관계를 나타내기 위하여 컬러바를 표시하는 과정이 남았으므로 COLORBAR 함수를 사용하여 다음과 같이 처리해봅시다.
cb = COLORBAR(TARGET=vec3, RANGE=[0, 40], $
POSITION=[0.2, 0.96, 0.8, 0.98], $
TITLE='Wind Speed (Knot)', /BORDER)
이렇게 하면 그래픽창의 상단에 수평 방향의 컬러바가 표시됩니다. 결과 그림을 보면 다음과 같습니다.
대략 이와 같은 방법을 사용하면 컬러테이블을 적용하여 벡터들을 여러가시 색상들로 표시할 수 있습니다. 물론 이와 같이 컬러테이블의 색상들을 벡터들에 적용하는 처리 방법은 벡터들을 바람깃 형태로 표시할 경우 뿐 아니라 화살표 형태로 표시할 경우에도 당연히 사용할 수 있습니다.
다만 화살표로 표시할 경우에는 그 길이 및 크기를 통해서 값의 고저를 바로 인지하기가 좋은 반면, 바람깃 형태로 표시할 경우에는 모든 벡터들의 주축(깃대)의 길이가 모두 동일한 상태에서 바람깃 끝부분만 보고 값의 크기를 판단하기가 다소 여의치 않을 수 있습니다. 특히 그림상에서 벡터들의 갯수가 많은 경우일수록 더 그럴 수 있습니다. 이런 경우에는 앞서 소개한 방법을 적용하여 값의 크기에 따라 색상이 다르게 표시되도록 하면, 그림을 보고 데이터를 인지하는데 있어서 풍속의 크기를 색상으로 구분할 수 있기 때문에 시각적으로 더 도움이 될 것 같습니다.
지난 회차 게시물에서는 기상청 ASOS 자료를 사용하여 풍속 및 풍향을 벡터 화살표의 형태로 표출하는 예제에 대하여 벡터들을 바람깃 형태로 표시해본 그림도 제시한 바 있는데요. 물론 여기서는 모든 벡터들이 단일 색상으로 표시되었습니다. 하지만 오늘 소개한 것과 같이 벡터들에 컬러테이블 기반으로 색상을 반영하는 방법을 적용하여 새로운 그림을 얻는 것도 가능할 것입니다. 그러한 방식으로 약간의 손질을 거쳐 새롭게 얻어본 예제 그림을 보면 다음과 같습니다.
따라서 위와 같이 VECTOR 함수를 사용하면서 컬러테이블을 적용하여 바람깃들을 다양한 색상들로 표시하는 것도 가능하다는 점을 참조해두시면 좋을 것 같습니다.
이 글이 도움이 되었다면 게시물에 대하여 공감 버튼(하트 모양) 클릭 및 블로그 구독도 해주시면 더 큰 힘이 됩니다. 감사합니다.