오늘은 IDL의 NG(New Graphics) 체계에서 플롯(Plot)을 표출하는데 있어서 PLOT 함수에서 수식(Equation)만 지정하여 그림을 구현하는 방법에 관하여 소개해보고자 합니다. 우리가 플롯을 표출하는데 있어서는, X축에 해당되는 값들로 구성된 배열을 정의하고 이를 일정한 수식에 의하여 계산하여 산출된 값들로 구성된 배열이 Y축에 대응되도록 하는 방식을 사용하는 것이 일반적입니다. 예를 들면 다음과 같은 방식입니다.
x = FINDGEN(101)/10-5
y = x^3-2*x^2-5*x+6
win = WINDOW(DIMENSIONS=[600, 500], /NO_TOOLBAR)
p = PLOT(x, y, THICK=2, COLOR='tomato', MARGIN=0.1, /CURRENT)
여기서는 -5~+5의 범위를 갖는 실수값들로 구성된 배열 x를 정의하고, 일정한 수식에 의하여 결과값들을 계산하여 y라는 배열에 담은 후, x와 y를 PLOT 함수에 투입하여 그림을 표출하게 됩니다. 여기서 사용된 수식은 X에 대한 3차식이라고 볼 수 있는데, 표출 결과를 보면 다음 그림과 같습니다.
그런데 위와 같은 작업을 하는데 있어서 수식 자체만 PLOT 함수에 직접 투입하는 것도 가능합니다. 즉 위에서 PLOT 함수가 사용된 부분만 다음과 같이 수정해봅시다.
p = PLOT('x^3-2*x^2-5*x+6', THICK=2, COLOR='tomato', $
MARGIN=0.1, /CURRENT)
여기서는 수식(Equation)에 해당되는 내용을 마치 문자값처럼 따옴표로 감싸서 지정하였음을 주목해야 합니다. 그리고 앞서 따로 정의했던 x, y 배열들이 전혀 사용되지 않았다는 것도 주목할 필요가 있습니다. 이러한 수정사항을 반영하여 다시 실행해보면 결과는 다음 그림과 같습니다.
이 그림을 보면 바로 앞서 따옴표로 지정된 수식이 그대로 반영되었음을 알 수 있습니다. 이와 같이 PLOT 함수에서는 특정한 수식을 나타내는 그림을 그리는데 있어서 X축 및 Y축에 해당되는 배열들(여기서는 x, y)을 생성하지 않고도 이와 같이 수식 자체만 명시하여 그림을 표출하는 것이 가능합니다. 이것은 IDL 8.3 버전부터 도입된 기능이며, 상황에 따라서는 여러모로 편리하게 사용할 수 있는 기능입니다.
그리고 수식만으로 표출된 바로 위의 그림과 앞서 맨 처음에 x, y를 사용하여 그렸던 그림을 비교해보면 뭔가 다릅니다. 실제로 가장 큰 차이점은 X축의 범위가 바로 위 그림에서는 -10~+10으로 설정되어 있다는 것인데요. 수식만으로 표출된 그림의 경우 위와 같이 X축이 -10~+10의 범위를 갖는 것이 디폴트입니다. 물론 XRANGE 속성을 이용하여 별도로 지정하는 것도 가능합니다. 예를 들면 위의 PLOT 함수의 내용을 다음과 같이 바꿔봅시다.
p = PLOT('x^3-2*x^2-5*x+6', XRANGE=[-20, 20], THICK=2, COLOR='tomato', $
MARGIN=0.1, /CURRENT)
이렇게 하면 X축 범위가 -20~+20인 다음과 같은 그림을 얻게 됩니다.
그런데 만약 맨 처음과 같이 x, y 배열들이 투입된 PLOT 함수의 내용에서 X축의 범위를 -20~+20으로 설정한다면, 어차피 x의 범위는 -5~+5이므로 다음과 같이 제한된 범위의 곡선만 표시되는 그림을 얻게 될 것입니다.
p = PLOT(x, y, XRANGE=[-20, 20], THICK=2, COLOR='tomato', $
MARGIN=0.1, /CURRENT)
따라서 수식 자체만 명시하여 그림을 표출할 경우에는 X축의 범위를 임의로 조정하더라도 그 범위에 맞는 곡선이 그려지게 된다는 장점이 있습니다. 물론 수식 자체만 명시하는 방식이 더 좋은 경우도 있고 X, Y 배열들을 사용하는 방식이 더 좋은 경우도 있기 때문에, 상황에 맞게 적절한 방식을 이용하면 됩니다. 그리고 수식 내에는 IDL의 내장함수가 포함되는 것도 허용됩니다. 즉 예를 들면 다음과 같이 SQRT 함수가 수식 내에 포함되어도 됩니다.
p = PLOT('2.7*SQRT(x)+5', XRANGE=[0, 100] , THICK=2, COLOR='tomato', MARGIN=0.1, /CURRENT)
또한 유저가 직접 정의한 함수의 이름이 마치 수식인 것처럼 명시되어도 됩니다. 즉 다음과 같은 경우입니다.
FUNCTION my_func, x
y = 3.2*EXP(-x^2/5.5)
RETURN, y
END
p = PLOT('my_func', THICK=2, COLOR='tomato', MARGIN=0.1, /CURRENT)
이와 같이 my_func이라는 이름의 사용자 정의 함수가 존재하는 상태에서 my_func이라는 이름 자체가 하나의 수식인 것처럼 사용될 수 있다는 의미입니다.
이와 같이 수식만으로 그림을 표출하는 기능은 다양한 방식으로 이용될 수 있습니다. 그리고 이러한 기능은 PLOT 함수 뿐 아니라 CONTOUR 함수 및 SURFACE 함수에서도 지원됩니다. 물론 CONTOUR, SURFACE 함수에 투입 가능한 수식은 X, Y가 공존하는 2차원적인 수식이 되어야 한다는 차이점이 있습니다. 나중에 기회가 되면 이와 관련된 예제도 소개해보기로 하겠습니다.
'IDL > New Graphics' 카테고리의 다른 글
수식(Equation)의 가시화에 관한 유의 사항들 (1) | 2024.07.12 |
---|---|
수식(Equation)만 명시하여 Contour 및 Surface 표출하기 (0) | 2024.07.09 |
IDL 9.0의 그림 저장 문제에 관하여 [2] (0) | 2024.06.25 |
IDL 9.0의 그림 저장 문제에 관하여 [1] (0) | 2024.05.29 |
그래픽 창의 위치를 직접 제어하는 방법 (0) | 2024.05.09 |