IDL/New Graphics

축의 라벨 문자들의 회전 처리

이상우_idl 2024. 2. 5. 15:42
728x90
반응형

IDL에서 X축, Y축 등으로 구성되는 그림을 그리게 되면 각 축에는 눈금 및 라벨 문자들이 붙게 됩니다. 일단 예제 데이터를 생성하고 플롯을 먼저 표출해보면 그 과정 및 결과 그림은 다음과 같습니다.

 

x = FINDGEN(301)*100
y = 1.7*SIN(1.3*x*!PI/250.0)*EXP(-0.002*x)
win = WINDOW(DIMENSIONS=[600, 500], /NO_TOOLBAR)
p = PLOT(x, y, COLOR='crimson', FONT_SIZE=11, /CURRENT)

 

 

이 플롯에서 X축을 보면 0~3000의 범위이며 500의 간격으로 7개의 눈금들에 대하여 라벨 문자들이 표기되어 있습니다. 그리고 문자의 방향은 당연히 정방향입니다. 그냥 이렇게만 표출해도 별다른 문제는 없습니다. 다만 경우에 따라서는 라벨 문자들을 비스듬한 각도로 기울여주는 것이 필요할 수도 있습니다. 즉 라벨 문자의 회전 각도를 별도로 설정하는 것입니다. 만약 X축의 라벨 문자들에 대한 회전 각도를 설정하려면 XTEXT_ORIENTATION 속성에 대하여 회전각도를 명시하면 됩니다. 예를 들면 다음과 같습니다.

 

p.XTEXT_ORIENTATION = 45

 

회전 각도는 북쪽 방향을 기준으로 반시계 방향이면 (+)이고 시계 방향이면 (-)가 됩니다. 따라서 위와 같이 회전각도를 45로 설정하면 라벨 문자들이 반시계 방향으로 45도 회전됩니다. 그 모습은 다음 그림과 같습니다.

 

 

만약 회전각도를 -45로 명시해주면 다음과 같이 시계 방향으로 45도 회전한 모습을 띄게 됩니다.

 

p.XTEXT_ORIENTATION = -45

 

 

이러한 방식으로 라벨 문자들을 회전시키는 것은 X축, Y축, Z축을 가지는 그림들에서는 [XYZ]TEXT_ORIENTATION 속성을 통하여 모두 가능합니다. 그러면 이번에는 지도(Map)의 경우도 살펴보겠습니다. 지도 그림 역시 경도 및 위도 방향의 라벨 문자들이 표기됩니다. 예제 지도를 먼저 표출해보면 그 과정은 다음과 같습니다.

 

limit = [33, 124, 40, 131]
win = WINDOW(DIMENSIONS=[600, 600], /NO_TOOLBAR)
m = MAP('Geographic', LIMIT=limit, FILL_COLOR='light blue', $
  FONT_SIZE=11, MARGIN=0.1, CLIP=0, /CURRENT)
mc = MAPCONTINENTS(FILL_COLOR='gold', /HIRES)
m.MapGrid.Label_Position = 0

m.MapGrid.Linestyle = 1
m.MapGrid.Horizon_Linestyle = 0

 

일단 이와 같이 투영법 설정은 그냥 'Geographic'으로 하고 한반도 부근의 지도를 표출해보면 다음과 같습니다.

 

 

이 그림을 보면 경도 및 위도 방향으로 라벨 문자들이 1도 간격으로 표기되어 있습니다. 특히 경도 방향의 라벨 문자들을 보면 90도로 기울어져 있는 모습인데, 이 문자들의 방향을 회전시켜보고자 합니다. 다만 그 방식은 앞서 일반적인 플롯에 대한 경우와는 다릅니다. 기본적으로는 지도 개체의 경도 또는 위도 눈금에 대한 Label_Angle 속성에 대하여 각도 값을 설정하는 방식이어야 합니다. 예를 들면 다음과 같습니다.

 

m['Longitudes'].Label_Angle = 45

 

이와 같이 약간 독특한 문법이 필요한데, 지도 개체(m)의 경도 눈금에 대한 Label_Angle 속성에 대하여 각도 값을 설정하면 됩니다. 회전의 기준 및 방향은 앞서 일반적인 플롯의 경우와 동일합니다. 어쨌든 이와 같은 설정을 적용하면 결과는 다음 그림과 같습니다.

 

 

특히 지도의 경우는 이와 같이 라벨 문자들의 회전이 필요한 경우들이 종종 있습니다. 예를 들어서 경도 또는 위도의 눈금 값들이 소수점 아래로 길어지는 경우가 그렇습니다. 이러한 상황은 경도 및 위도의 범위가 좁을 때 주로 발생합니다. 이러한 경우의 예를 한번 살펴보기 위하여 앞선 내용에서 지도의 경도 및 위도의 범위를 다음과 같이 126~127 및 34~35로 변경하고 경도 라벨 문자들의 회전은 따로 하지않고 그냥 디폴트로 되돌려서 다시 표출해봅시다.

 

limit = [34, 126, 35, 127]

 

즉 이와 같은 변경사항들만 적용하여 다시 표출해보면 그 모습은 다음과 같습니다.

 

 

이와 같이 경도 및 위도의 범위가 좁아지니까 각 눈금별 값들은 더 세분화되면서 소수점 아래로 길이가 더 길어집니다. 그러다보니 라벨 문자들이 이와 같이 잘려서 보이는 현상이 나타납니다. 이런 경우에 대한 해결책은 대략 두가지입니다. 일단 첫번째 방법은 여백을 더 넓히는 것인데, 그렇게 하면 정작 지도 자체는 그림이 더 작아진다는 단점이 있습니다. 지금 상황을 보면 좌측 및 하단 여백을 대폭 넓혀야 할 것 같습니다. 이를 위하여 MAP 함수가 사용된 내용에서 MARGIN의 값만 다음과 같이 변경해봅시다.

 

m = MAP('Geographic', LIMIT=limit, FILL_COLOR='light blue', $
  FONT_SIZE=11, MARGIN=[0.2, 0.2, 0.1, 0.1], CLIP=0, /CURRENT)

 

이러한 변경사항만 적용하여 다시 실행해보면 결과는 다음 그림과 같습니다.

 

 

사실 뭐 이렇게 해도 나쁘지 않을 수 있지만 여백이 너무 넓어서 지도 자체는 꽤 작아지게 된다는 아쉬움은 있습니다. 그리고 두번째 방법은 라벨 문자들을 비스듬하게 표시하는 것입니다. 물론 그래도 여백을 약간 더 넓혀야 할 수도 있겠지만 위의 그림만큼은 아니어도 될 것 같습니다. 이러한 방식으로 나름 시도를 해봅시다. 먼저 다음과 같이 경도 및 위도 라벨 문자들의 회전 각도는 45도로 설정해줍니다.

 

  m['Longitudes'].Label_Angle = 45
  m['Latitudes'].Label_Angle = 45

 

그리고 지도의 여백은 다음과 같이 설정해봅시다.

 

m = MAP('Geographic', LIMIT=limit, FILL_COLOR='light blue', $
  FONT_SIZE=11, MARGIN=[0.14, 0.14, 0.1, 0.1], CLIP=0, /CURRENT)

 

이러한 변경사항들을 적용하여 다시 실행해보면 결과는 다음 그림과 같습니다.

 

 

이렇게 하면 라벨 문자들이 길어지긴 했지만 그 각도를 비스듬하게 해줌으로써 여백의 증가폭을 조금이나마 줄일 수 있습니다. 물론 이것은 하나의 예일 뿐이고 문자들의 회전 각도 및 여백에 대한 설정은 유저 나름대로 더 나은 대안이 있을 수도 있을 것입니다. 그리고 이러한 처리 방식은 다른 투영법의 지도들에서도 유효합니다. 예를 들어 LCC(Lambert Conformal Conic) 투영법의 지도를 표출하고 유사한 방식으로 경도 라벨 문자들의 회전 각도를 45도로 설정해봅시다.

 

limit = [20, 120, 50, 150]
win = WINDOW(DIMENSIONS=[600, 600], /NO_TOOLBAR)
m = MAP('Lambert Conformal Conic', LIMIT=limit, $
  STANDARD_PAR1=30, STANDARD_PAR2=60, $
  FILL_COLOR='light blue', FONT_SIZE=11, MARGIN=0.1, CLIP=0, /CURRENT)
mc = MAPCONTINENTS(FILL_COLOR='gold', /HIRES)
m.MapGrid.Label_Position = 0
m.MapGrid.Linestyle = 1
m.MapGrid.Horizon_Linestyle = 0
m['Longitudes'].Label_Angle = 45

m['Longitudes'].Label_Color = 'crimson'

 

여기서는 경도 라벨 문자들의 회전 각도 뿐 아니라 색상도 Label_Color 속성을 통하여 설정해보았는데요. 회전 각도 뿐 아니라 기타 다른 속성들도 이와 같은 방식으로 조정할 수 있다는 것을 보여주기 위함입니다. 어쨌든 결과는 다음 그림과 같습니다.

 

 

지금까지 일반 플롯 및 지도 그림들에서 축의 라벨 문자들을 회전시키는 방법들을 살펴보았습니다. 축(Axis)들로 구성되는 그림에서 라벨 문자들에 대한 회전 각도를 조정할 수 있다는 점을 잘 이용하면 그림 표출에 있어서 좀 더 유연성을 가질 수 있음을 염두에 두면 좋을 것 같습니다.

반응형