IDL/New Graphics

NG 체계 플롯에서 타이틀 문자의 세부 설정

이상우_idl 2021. 8. 9. 19:35
728x90
반응형

우리가 NG 체계에서 여러가지 플롯(Plot)을 표출할 때 타이틀 문자들을 붙이는 경우가 많습니다. 즉 PLOT 함수를 사용하여 플롯 표출을 하는데 있어서, X 및 Y 축 각각에 대한 타이틀 문자의 삽입 뿐 아니라 플롯 자체의 타이틀 문자의 삽입도 가능합니다. 이를 위하여 PLOT 함수의 XTITLE, YTITLE, TITLE 속성을 사용하게 됩니다. 예제를 하나 본다면 다음과 같습니다.

 

x = [0:100:1.0]
y = SQRT(x)+2*RANDOMU(-1, N_ELEMENTS(x))
win = WINDOW(DIMENSIONS=[600, 500], /NO_TOOLBAR)
p = PLOT(x, y, LINESTYLE=6, SYMBOL='circle', $
  /SYM_FILLED, SYM_COLOR='medium turquoise', $
  XTITLE='X Title', YTITLE='Y Title', $
  TITLE='My Plot 20210806', $
  FONT_SIZE=11, MARGIN=0.1, /CURRENT)

 

여기서는 임의의 x, y 데이터에 대한 플롯을 PLOT 함수를 사용하여 표출하고 각 타이틀 문자까지 삽입해본 것입니다. 표출된 모습은 다음 그림과 같습니다.

 

 

일반적으로는 그냥 이러한 방식으로 표출을 해도 큰 무리는 없습니다. 그런데 예를 들어서 가운데 상단에 삽입된 타이틀 문자에 대하여 크기를 더 키우거나 색상 및 스타일을 조정하고 싶다고 합시다. 사실 PLOT 함수 내에서는 X 및 Y 축 타이틀 문자에 대해서는 세부 조정 기능들이 제공됩니다. 예를 들어 X 축 타이틀 문자의 경우에는 XTICKFONT_SIZE, XTEXT_COLOR 등의 속성들을 사용하면 됩니다. 하지만 그냥 타이틀 문자에 대한 별도의 세부 조정 기능은 제공되지 않습니다. 따라서 타이틀 문자에 대한 세부 조정이 필요할 경우에는 별도로 작업을 해줘야 합니다. 그 방법을 소개해보도록 하겠습니다.

 

먼저 위의 PLOT 함수가 사용된 부분에서 타이틀 문자와 관련된 속성들을 모두 삭제합니다. 즉 다음과 같이 수정합니다.

 

p = PLOT(x, y, LINESTYLE=6, SYMBOL='circle', $
  /SYM_FILLED, SYM_COLOR='medium turquoise', $
  FONT_SIZE=11, MARGIN=0.1, /CURRENT)

 

그 다음에는 TEXT 함수를 사용하여 별도로 타이틀 문자를 삽입하게 됩니다. 그런데 이를 위해서는 문자가 삽입될 위치 좌표를 정의해주는 것이 필요한데요. 플롯 그림을 기준으로 가운데 상단에 해당되는 위치에 대한 (x, y) 좌표값을 정의해줘야 하는데 이 부분이 약간 복잡해보일 수 있습니다. 일단 이 과정을 보면 다음과 같습니다.

 

xp = p.XRANGE[0]+(p.XRANGE[1]-p.XRANGE[0])*0.5
yp = p.YRANGE[1]+(p.YRANGE[1]-p.YRANGE[0])*0.04
tt = TEXT(xp, yp, 'My Plot 20210806', ALIGNMENT=0.5, $
  FONT_SIZE=16, FONT_COLOR='tomato', /DATA, CLIP=0)

 

여기서는 삽입될 문자의 (x, y) 좌표값에 해당되는 xp, yp를 각각 정의하였는데요. 이 과정을 보면 p.XRANGE 및 p.YRANGE라는 항목들이 사용되고 있습니다. 이는 앞서 PLOT 함수에 의하여 표출되어 있는 플롯 개체인 p로부터 X축 및 Y축에 대한 범위값들로 구성된 배열입니다. 다음과 같이 각 항목에 대한 정보를 출력해보면 확실히 알 수 있습니다.

 

HELP, p.XRANGE
PRINT, p.XRANGE
HELP, p.YRANGE
PRINT, p.yRANGE

 

출력된 내용은 다음과 같습니다.

 

<Expression>    DOUBLE    = Array[2]
       0.0000000       100.00000
<Expression>    DOUBLE    = Array[2]
       0.0000000       12.000000

 

즉 이미 표출되어 있는 플롯 개체에 대한 X 및 Y 축에 대한 범위값 정보가 담긴 배열을 TEXT 함수에서 활용한 것입니다. 여기서 xp의 산출 과정을 보면 p.XRANGE[0]은 X축 범위의 하한값이고 (p.XRANGE[1]-p.XRANGE[0])은 X축 범위의 폭에 해당됩니다. 그 폭에 0.5를 곱해서 범위 하한값에 더하면 바로 X축의 한가운데 위치 좌표가 되는 것입니다. 그리고 yp의 경우는 Y축 범위의 상한값인 p.YRANGE[1]에다가 Y축 범위의 폭의 0.04배 값을 더함으로써 Y축 범위의 약간 상단에 해당되는 좌표가 되도록 한 것입니다. 이렇게 산출된 xp, yp를 TEXT 함수에서 활용한 것인데, 이 과정에 의하여 표출된 결과는 다음 그림과 같습니다.

 

 

이와 같은 방법을 활용하면 타이틀 문자의 크기, 색상, 스타일 뿐 아니라 위치까지도 다양하게 변경이 가능합니다. 특히 yp가 정의된 부분에서 진하게 표시된 0.04라는 값을 조정해보면 타이틀 문자의 위치를 위 또는 아래로 변경하는 것도 가능한데요. 예를 들어 다음과 같이 0.08로 바꿔서 다시 실행해보면 결과는 다음 그림과 같습니다.

 

yp = p.YRANGE[1]+(p.YRANGE[1]-p.YRANGE[0])*0.08

 

 

이외에도 다양한 값들을 활용하여 타이틀 문자와 플롯 사이의 간격을 조정할 수 있으므로 여러분도 직접 테스트해보시기 바랍니다. 그리고 이러한 요령은 X 및 Y 축 타이틀 문자에 대해서도 비슷한 방식으로 적용할 수 있습니다. 그 과정은 다음과 같습니다.

 

xp = p.XRANGE[0]+(p.XRANGE[1]-p.XRANGE[0])*0.5
yp = p.YRANGE[0]-(p.YRANGE[1]-p.YRANGE[0])*0.09
ttx = TEXT(xp, yp, 'X Title', ALIGNMENT=0.5, $
  FONT_SIZE=14, FONT_COLOR='royal blue', /DATA, CLIP=0)

xp = p.XRANGE[0]-(p.XRANGE[1]-p.XRANGE[0])*0.06
yp = p.YRANGE[0]+(p.YRANGE[1]-p.YRANGE[0])*0.5
tty = TEXT(xp, yp, 'Y Title', ALIGNMENT=0.5, ORIENTATION=90, $
  FONT_SIZE=14, FONT_COLOR='royal blue', /DATA, CLIP=0)

 

이 과정들까지 추가하여 표출된 결과는 다음 그림과 같습니다.

 

 

그리고 이 과정에서도 진하게 표시된 0.09 및 0.06이란 값을 조정하면 X 및 Y 타이틀 문자의 위치도 변경이 가능하므로 이것도 여러분이 직접 테스트해보시기 바랍니다. 어쨌든 오늘 소개한 내용을 잘 활용하면 각종 타이틀 문자들 뿐 아니라 일반적인 캡션 문자들을 커스터마이즈하는데 있어서 여러가지 가능성이 열리기 때문에 잘 알아두시면 좋을 것 같습니다.

반응형