IDL/New Graphics

VECTOR 함수를 이용하여 벡터 필드 표출하기 [2]

이상우_idl 2017. 12. 7. 20:49
728x90
반응형

지난 회 게시물에 이어서 VECTOR 함수에 관한 내용을 마저 소개해보겠습니다. 일단 다음과 같이 지난 회에서 사용했던 데이터를 그대로 먼저 표출해놓고 시작하겠습니다.


x = [10:80:10.]

y = [10:60:10.]

u = RANDOMU(-1, N_ELEMENTS(x), N_ELEMENTS(y))*2-1

v = RANDOMU(-5, N_ELEMENTS(x), N_ELEMENTS(y))*2-1

win1 = WINDOW(DIMENSIONS=[600, 500], /NO_TOOLBAR)

vec1 = VECTOR(u, v, x, y, AXIS_STYLE=2, ARROW_THICK=3, $

  COLOR='green', XRANGE=[0, 90], YRANGE=[0, 70], /CURRENT)



오늘은 VECTOR 함수에서 지원되는 기능들 중 데이터 포인트의 샘플링을 수행하는 X_SUBSAMPLE, Y_SUBSAMPLE 속성을 살펴보고자 합니다. 이 기능은 쉽게 생각하면 데이터 포인트들 모두 사용하지 않고 일정 간격으로 건너뛰면서 사용하는 방식이라고 보면 됩니다. 즉 벡터들을 모두 표시하지 않고 띄엄띄엄 표시하는 역할을 합니다. 일단 다음과 같이 별도의 그래픽창을 띄우고 여기서는 샘플링 기능을 적용하여 벡터들을 표출해보면 그 결과는 다음 그림과 같습니다.


win2 = WINDOW(DIMENSIONS=[600, 500], /NO_TOOLBAR)

vec2 = VECTOR(u, v, x, y, AXIS_STYLE=2, ARROW_THICK=3, $

  DATA_LOCATION=1, COLOR='green', XRANGE=[0, 90], YRANGE=[0, 70], $

  X_SUBSAMPLE=2, Y_SUBSAMPLE=2, /CURRENT)



이와 같이 원본 데이터보다 더 적은 수의 벡터들만 표시가 되었는데, 잘 보면 XY축 각 방향으로 하나 걸러 하나씩 표시된 것을 볼 수 있습니다. 그래서 생략된 벡터와 표시된 벡터의 구분을 좀 더 명확히 하기 위하여, 다음과 같이 원본 데이터 그대로 벡터들을 표시한 다음, 샘플링되어 표시된 벡터들을 붉은색으로 중첩 표출해보았습니다. 그 결과는 다음 그림과 같습니다.


win3 = WINDOW(DIMENSIONS=[600, 500], /NO_TOOLBAR)

vec3 = VECTOR(u, v, x, y, AXIS_STYLE=2, ARROW_THICK=3, $

  DATA_LOCATION=1, COLOR='green', XRANGE=[0, 90], YRANGE=[0, 70], $

  /CURRENT)

vec3o = VECTOR(u, v, x, y, ARROW_THICK=3, DATA_LOCATION=1, $

  COLOR='red', X_SUBSAMPLE=2, Y_SUBSAMPLE=2, /OVERPLOT)



이렇게 하면 어떤 벡터들이 살아남아 표시되고 있는가를 쉽게 구분할 수 있습니다. 이번에는 샘플링 사이즈를 2 대신 3으로 바꿔보겠습니다. 이를 위해서는 위의 코드에서 X_SUBSAMPLE 및 Y_SUBSAMPLE 속성에 2 대신 3을 주면 됩니다. 그러면 그 결과는 다음 그림과 같습니다.



얼핏 보면 샘플링 사이즈가 2인 경우와 별 차이가 없어보일 수도 있지만, 자세히 보면 붉은 벡터들의 위치가 분명히 서로 다릅니다. 사실여기서 얘기하는 "샘플링(Sampling)"의 개념은 몇개씩 건너뛴다는 의미라기보다는 몇개씩 선택하여 그 중 대표값을 샘플링 기법으로 뽑아낸다는 의미로 보는 것이 맞습니다. 즉 샘플링 사이즈가 3이라면, 처음부터 세개씩 선택한 후 그 중 가운데 위치에 가장 가까운 값을채택하여 가운데 위치에만 값을 남겨두는 방식이 됩니다. 이런 맥락으로 생각하면 위의 그림에서 붉은색 벡터들의 위치가 왜 저렇게 정해져있는가를 이해할 수 있습니다. 어쨌든 샘플링 기능을 사용하면, 데이터 포인트가 너무 많을 경우 벡터들을 어느 정도 걸러낸 다음 좀 더 깔끔하게 표출이 가능하다는 장점이 있습니다. 그리고 VECTOR 함수에서는 AUTO_SUBSAMPLE, SUBSAMPLE_METHOD와 같이 샘플링과 관련된 속성들이 더 있다는 점도 참조해두시면 좋겠습니다.


이번에는 벡터들에 대하여 색상을 입히는 기능을 수행하는 AUTO_COLOR라는 속성을 소개해볼까 합니다. 원래 기본 설정은 모든 벡터들을 동일한 색상으로 표현하는 것이지만, 이 AUTO_COLOR 속성을 이용하면 벡터의 크기 또는 방향에 따라 차등적으로 색상을 배정할수 있습니다. 다음 예제 코드에서는 별도의 그래픽창을 띄우고 원본 데이터 그대로 벡터들을 표시하되 AUTO_COLOR 속성을 사용하여 벡터들이 다양한 색상들로 표시되도록 하였습니다. 그 결과는 다음 그림과 같습니다.


win4 = WINDOW(DIMENSIONS=[600, 500], /NO_TOOLBAR)

vec4 = VECTOR(u, v, x, y, AXIS_STYLE=2, ARROW_THICK=3, $

  DATA_LOCATION=1, COLOR='green', XRANGE=[0, 90], YRANGE=[0, 70], $

  LENGTH_SCALE=1, AUTO_COLOR=1, RGB_TABLE=73, /CURRENT)

cbar = COLORBAR(TARGET=vec4, /BORDER)



위 예제 코드를 보면 AUTO_COLOR 속성과 함께 RGB_TABLE 속성도 함께 사용된 것을 볼 수 있습니다. 즉 특정 컬러테이블에 존재하는 색상들을 사용하란 의미입니다. 그리고 AUTO_COLOR 속성에 1이란 값이 주어져있는데, 이것은 색상을 배정하는 기준을 벡터의 크기(Magnitude)로 하란 의미입니다. 그래서 하단에 표시된 컬러바를 보면 어떤 크기값이 어떤 색상으로 대응되었는지 알 수 있습니다. 만약 AUTO_COLOR 속성에 대하여 1 대신 2를 주면, 색상을 배정하는 기준은 벡터의 크기 대신 방향이 됩니다. 그 결과는 다음 그림과 같습니다. 역시 하단에 표시된 컬러테이블을 보면 어떤 방향이 어떤 색상으로 대응되었는지 확인이 가능합니다.



VECTOR 함수에는 이외에도 다양한 속성들이 지원되고 있는데요. 일단 저는 이 정도까지만 소개하는 것으로 하겠습니다. 나머지 속성들에 대해서는 유저 여러분께서 직접 찾아보시고 필요한 것을 골라 쓰실 수 있으리라 생각합니다.

반응형