IDL에서 그래픽 작업을 할 때, 어떤 그래픽 요소를 특정한 위치에 배치하는데 있어서 그 좌표값을 해석하는 기준들이 있습니다. IDL에서는 이러한 기준 즉 좌표 체계(Coordinate System)가 3종이 있는데 바로 Data, Device, Normal 좌표계입니다. 그래서 그래픽 개체를 삽입하는 역할을 수행하는 각종 그래픽 기능 함수들(TEXT, SYMBOL, POLYGON, POLYLINE 등)을 보면 좌표 체계를 명시하는 역할을 하는 키워드들(/DATA, /DEVICE, /NORMAL)이 지원됩니다. 사실 이러한 부분은 NG 체계 뿐 아니라 DG 체계의 그래픽 기능들도 마찬가지이긴 합니다만, 일단 여기서는 NG 체계의 기능들 중심으로 소개하도록 하겠습니다. 일단 3종의 좌표 체계들은 다음과 같습니다.
1. 데이터(Data) 좌표계 : 현재 표출된 데이터의 범위 기반이며 /DATA 키워드로 명시
2. 디바이스(Device) 좌표계 : 그래픽창 화면을 구성하는 화소(Pixel) 기반이며 /DEVICE 키워드로 명시
3. 노멀(Normal) 좌표계 : 0~1 범위로 정규화(Normalized)된 범위 기반이며 /NORMAL 키워드로 명시
그러면 예제를 통하여 살펴봅시다. 다음과 같이 그래픽창을 띄우고 그 안에 간단한 플롯을 하나 표출합니다.
win = WINDOW(DIMENSIONS=[600, 500], /NO_TOOLBAR)
x = FINDGEN(101)
y = SQRT(x)
p = PLOT(x, y, COLOR='green', FONT_SIZE=10, MARGIN=0.1, /CURRENT)
여기서는 600x500의 화소 크기를 갖는 그래픽창을 띄우고 XY 플롯을 하나 표출하였습니다. 데이터 값의 범위를 보면 X는 0~100이 되고 Y는 제곱근이기 때문에 0~10이 됩니다. 표출된 그림은 다음과 같습니다.
이 상태에서 특정한 위치에 문자열을 삽입해보겠습니다. 먼저 플롯 상의 X 및 Y 데이터 범위 기준으로 좌표가 (80, 4)인 위치에 IDL이란 문자열을 삽입하는 과정은 다음과 같습니다.
tx = TEXT(80, 4, 'IDL', COLOR='crimson', FONT_SIZE=12, /DATA)
그리고 문자열이 삽입된 모습은 다음 그림과 같습니다.
이와 같이 IDL이란 문자열을 데이터 좌표계 기준의 좌표 (80, 4)의 위치에 표시하였습니다. 여기서는 (80, 4)가 데이터 좌표계 기준임을 명확하게 하기 위하여 /DATA 키워드를 반드시 사용해야 합니다. 만약 이 키워드를 사용하지 않으면 문자열이 정상적으로 표시되지 않는다는 것을 유의해야 합니다(이 때 에러가 발생하지는 않습니다. 다만 엉뚱한 위치 즉 우리 눈에 보이지 않는 어딘가에 문자열이 표시되어있을 뿐입니다). 문자열이 삽입된 위치를 좀 더 명확히 표시하기 위하여 다음과 같이 POLYLINE 함수를 사용하여 보조선을 추가해도 좋을 것 같습니다.
line = POLYLINE([80, 80, 0], [0, 4, 4], LINESTYLE=2, COLOR='crimson', /DATA)
보조선까지 추가된 모습은 다음과 같습니다.
이번에는 디바이스 좌표계를 보겠습니다. 이 좌표계에서는 좌표값이 픽셀(Pixel) 단위라는 점을 염두에 두고, 좌표가 (200, 100)인 위치에 IDL이란 문자열을 삽입해봅시다. 그 과정은 다음과 같습니다. 보조선을 추가하는 과정까지 포함하였습니다.
tx = TEXT(200, 100, 'IDL', COLOR='crimson', FONT_SIZE=12, /DEVICE)
line = POLYLINE([200, 200, 0], [0, 100, 100], LINESTYLE=2, COLOR='crimson', /DEVICE)
여기서는 좌표 (200, 100)이 디바이스 좌표계임을 명확하게 하기 위하여 /DEVICE 키워드를 사용해야 한다는 것을 유의해야 합니다. 그리고 앞서 우리가 띄워놓은 그래픽창의 크기가 600x500이라는 사실을 떠올려야 합니다. 물론 그 단위는 픽셀입니다. 따라서 (200, 100)이라는 좌표에 해당되는 위치는 그래픽창 내에서 좌측 하단 근방이 될 것입니다. 실제로 표출된 모습은 다음 그림과 같습니다.
이제 마지막으로 노멀 좌표계를 보겠습니다. 이 좌표계에서는 X 및 Y 방향 좌표값의 범위가 무조건 0~1이 됩니다. 원래의 절대 크기가 얼마였든 상관이 없습니다. 그러면 좌표가 (0.5, 0.5)인 위치에 IDL이란 문자열을 삽입해봅시다. 그 과정은 다음과 같으며, 보조선을 추가하는 과정도 포함하였습니다.
tx = TEXT(0.5, 0.5, 'IDL', COLOR='crimson', FONT_SIZE=12, /NORMAL)
line = POLYLINE([0.5, 0.5, 0], [0, 0.5, 0.5], LINESTYLE=2, COLOR='crimson', /NORMAL)
여기서는 좌표 (0.5, 0.5)가 노멀 좌표계임을 명확하게 하기 위하여 /NORMAL 키워드를 사용해야 한다는 것을 유의해야 합니다. 그리고 그래픽창의 크기, 표출된 플롯의 값 범위 등에 관계없이 좌표값이 어느 방향이든 무조건 0~1이 된다는 점을 감안한다면, (0.5, 0.5)라는 좌표가 그래픽창의 정가운데 지점이 된다는 것을 쉽게 짐작할 수 있습니다. 이것은 표출된 그림을 봐도 바로 확인이 됩니다.
이와 같이 데이터(Data), 디바이스(Device), 노멀(Normal) 좌표계의 개념 및 적용 방법을 살펴보았습니다. 여기서는 NG 체계를 기준으로 예제를 소개하였는데, 사실 이러한 개념은 DG 체계에서도 동일하게 존재합니다. 우리가 앞서 데이터 좌표계 기준 (80, 4)의 위치에 문자열을 삽입했던 것과 유사한 작업을 DG 체계의 그래픽 기능들을 사용하여 비슷하게 구현하는 과정을 예로 들면 대략 다음과 같습니다.
DEVICE, DECOMPOSED=1
WINDOW, XSIZE=600, YSIZE=500, RETAIN=2
PLOT, x, y, COLOR='000000'x, BACKGROUND='FFFFFF'x, CHARSIZE=1.2
XYOUTS, 80, 4, 'IDL', COLOR='0000EE'x, CHARSIZE=1.5, /DATA
PLOTS, [80, 80, 0], [0, 4, 4], LINESTYLE=2, COLOR='0000EE'x, /DATA
여기서는 WINDOW 명령을 사용하여 DG 체계의 그래픽창을 띄우고 PLOT 명령을 사용하여 플롯을 표출하였습니다. 이 PLOT 명령에서 사용된 x, y 데이터는 앞서 정의해놓은 것을 그대로 사용한 것입니다. 그리고 문자열 및 보조선을 표시하기 위하여 사용된 XYOUTS 및 PLOTS 명령에서 좌표계에 대한 명시를 위하여 /DATA 키워드가 사용되었음을 주목하면 됩니다. 이 과정에 의하여 표출된 그림은 다음과 같습니다.
'IDL > New Graphics' 카테고리의 다른 글
3차원 막대그래프(?)의 표출 (0) | 2022.02.08 |
---|---|
그래픽 좌표 체계 Relative 소개 (0) | 2022.01.12 |
NG 체계의 그래픽 개체의 특성 및 활용 (0) | 2021.10.07 |
등위선(Contour)과 컬러바(Colorbar) (0) | 2021.09.27 |
BOXPLOT 함수 소개 (0) | 2021.09.07 |