IDL/Direct Graphics

DG 체계에서 여백의 설정 방법

이상우_idl 2024. 4. 9. 14:04
728x90
반응형

오늘은 IDL의 DG(Direct Graphics) 체계에서 그림을 표출할 때 여백을 설정하는 방법에 관하여 알아보고자 합니다. 참고로 NG(New Graphics) 체계에서는 주로 MARGIN 키워드를 사용하여 상하좌우의 여백을 직접 설정하는 방식을 많이 사용합니다. 하지만 DG 체계에서는 여백을 설정하는 방식이 조금 다릅니다. 그러면 DG 체계에서 예제 그림을 표출해보면서 시작하기로 합니다. 간단한 예제로서 플롯(Plot) 형태의 그림을 표출하기 위한 예제 데이터의 생성 및 기본적인 표출 과정은 다음과 같습니다.

 

DEVICE, DECOMPOSED=0
WINDOW, XSIZE=600, YSIZE=500
LOADCT, 0
!P.BACKGROUND = 255
x = FINDGEN(121)
y = 1.7*SIN(2.0*x*!PI/25.0)*EXP(-0.02*x)
PLOT, x, y, COLOR=0, /NODATA
LOADCT, 34
OPLOT, x, y, COLOR=255, THICK=2

LOADCT, 0

!P.BACKGROUND = 0

 

이와 같이 x, y 데이터를 생성한 후 WINDOW 및 PLOT 프로시저를 사용하여 그림을 표출하였습니다. 여기서 PLOT 프로시저의 내용을 보면 여백과 관련된 설정은 전혀 하지 않은 상태입니다. 그리고 이 과정에서는 플롯 라인의 색상 처리를 위하여 먼저 PLOT 프로시저를 /NODATA 키워드와 함께 사용하여 XY축으로만 구성된 그림을 표출해놓은 상태에서 OPLOT 프로시저를 활용하여 붉은 색상을 띈 플롯 라인만 덧그리는 방식으로 처리하였습니다. 표출된 그림을 보면 다음과 같습니다.

 

 

이 그림의 여백 처리를 보면 좌측 및 하단 여백은 좀 넓고 우측 및 상단 여백은 좁은 것이 눈에 띕니다. 이와 같이 여백에 관한 설정을 디폴트로 그냥 두는 경우에는 IDL이 알아서 이러한 방식으로 여백을 처리하게 됩니다. 그러면 이제부터는 여백을 직접 설정해봅시다. DG 체계에서의 여백 설정 방법으로는 먼저 [XY]MARGIN 키워드를 사용하는 방법이 있습니다. 즉 X축 방향의 여백은 XMARGIN 키워드로 그리고 Y축 방향의 여백은 YMARGIN 키워드로 설정합니다. 세부적인 설명에 앞서 먼저 이 키워드들을 사용해봅시다. 앞서 제시된 PLOT 프로시저의 내용을 다음과 같이 수정하고 전체 과정을 다시 실행하면 됩니다.

 

PLOT, x, y, COLOR=0, XMARGIN=[5, 5], YMARGIN=[4, 4], /NODATA

 

다시 실행해본 결과는 다음 그림과 같습니다.

 

 

이 그림을 보면 여백이 인위적으로 설정된 것으로 보입니다. 그리고 XMARGIN 및 YMARGIN 키워드에 부여된 값들을 적당히 조정하면 원하는 방식으로 여백을 설정할 수 있습니다. 다만 여기서 XMARGIN 및 YMARGIN 키워드에 부여된 값들의 의미를 살펴볼 필요가 있습니다. 여기서는 XMARGIN 키워드에 대하여 [5, 5]를 부여하였고 YMARGIN 키워드에 대해서는 [4, 4]를 부여하였는데요. 먼저 XMARGIN 키워드에 부여된 두 값은 각각 좌측 및 우측의 여백의 크기입니다. 그리고 YMARGIN 키워드에 부여된 두 값은 각각 하단 및 상단의 여백의 크기입니다. 그런데 여기서 5 또는 4라는 수치는 정확히 어떤 의미일까요? IDL 도움말에서 이 키워드들에 관한 세부 내용을 보면 "in units of character size"라는 문구가 있습니다. 즉 이 그림에서 사용되는 문자의 크기가 그 단위가 된다는 의미입니다. 정확히 얘기하면 문자의 가로 방향 크기가 X축 방향 여백의 단위가 되고 세로 방향 크기가 Y축 방향 여백의 단위가 된다고 보면 됩니다. 결국은 [XY]MARGIN 키워드로 여백을 설정하는 경우에는 여백의 크기가 문자의 크기와 연동된다는 것입니다. 그러면 위의 PLOT 프로시저에서 다음과 같이 CHARSIZE 키워드를 추가로 사용하여 문자의 크기를 조정해봅시다.

 

PLOT, x, y, COLOR=0, XMARGIN=[5, 5], YMARGIN=[4, 4], $

  CHARSIZE=2, /NODATA

 

이러한 변경사항을 반영하여 전체 과정을 다시 실행해보면 그 결과는 다음 그림과 같습니다.

 

 

이와 같이 앞선 그림에 비해서는 전체적으로 여백의 크기가 두 배가 되었음을 알 수 있습니다. 따라서 [XY]MARGIN 키워드의 작동 방식이 이렇다는 것을 알아두는 것이 중요합니다. 그런데 여백의 처리에 있어서 이러한 방식이 그리 나쁘지는 않겠지만, 여백의 크기를 설정하는 수치의 단위가 문자의 크기에 따라 매번 좌우된다는 점에서 그리 효율적인 방법이 아니란 생각이 들 수도 있습니다. 물론 대안은 있습니다. 바로 두번째 방법인 POSITION 키워드를 사용하는 방법입니다. 참고로 POSITION 키워드의 개념 및 그 값의 설정 방식에 관해서는 제가 예전에 올렸던 관련 게시물의 내용을 참조하기로 하고 바로 사용 예제를 보도록 하겠습니다. 위의 PLOT 프로시저의 내용을 다음과 같이 POSITION 키워드를 사용하는 방식으로 바꿔봅시다.

 

PLOT, x, y, COLOR=0, POSITION=[0.1, 0.1, 0.9, 0.9], /NODATA

 

이러한 변경사항을 반영하여 전체 과정을 다시 실행해보면 결과는 다음 그림과 같습니다.

 

 

여기서 POSITION 키워드에 설정된 값들의 의미를 보면, XY축 사각형의 좌측 하단 꼭지점의 위치 좌표가 [0.1, 0.1]이고 우측 상단 꼭지점의 위치 좌표가 [0.9, 0.9]라는 뜻입니다. 그리고 이 수치들은 노멀(Normal) 좌표계 기준입니다. 이렇게 하면 결국 상하좌우의 여백이 0.1이 되도록 처리한 것과 마찬가지가 됩니다. 물론 원론적으로 보면 POSITION 키워드의 역할은 여백이라기보다는 위치를 조정하는 성격이 더 강한 것이 사실이지만, 궁극적으로는 여백을 조정하는 것과 동일한 효과를 얻게 된다는 것은 분명합니다. 어쨌든 이러한 방식으로 여백을 설정하는 것이 앞서 [XY]MARGIN 키워드를 사용하는 방식에 비해서는 좀 더 명확할 뿐 아니라 문자의 크기에 전혀 영향을 받지 않는다는 장점도 있습니다. 즉 위의 PLOT 프로시저에서 다음과 같이 문자의 크기를 따로 변경해봅시다.

 

PLOT, x, y, COLOR=0, POSITION=[0.1, 0.1, 0.9, 0.9], CHARSIZE=2, /NODATA

 

이렇게 문자 크기를 변경하더라도 여백 자체는 문자의 크기에 전혀 영향을 받지 않는다는 것을 표출 결과 그림에서 바로 확인할 수 있습니다.

 

 

물론 이와 같이 문자 크기가 커졌을 때 적절한 여백을 다시 설정하는 것은 유저의 몫이 될 것입니다. 이러한 경우라면 대략 다음과 같이 여백을 설정하면 적당하지 않을까 싶습니다.

 

PLOT, x, y, COLOR=0, POSITION=[0.15, 0.15, 0.9, 0.9], CHARSIZE=2, /NODATA

 

 

어쨌든 결론적으로 보면 DG 체계에서 그림의 여백을 설정하는데 있어서는 [XY]MARGIN 키워드를 사용하는 방법이 있지만 POSITION 키워드를 사용하는 방법이 좀 더 명확하고 직관적이지않을까 생각이 듭니다. 물론 최종적인 판단과 선택은 유저의 몫이 될 것입니다.

반응형