IDL/New Graphics

_EXTRA 키워드의 활용 예제

이상우_idl 2022. 4. 28. 15:09
728x90
반응형

오늘은 _EXTRA 키워드를 활용하는 예제를 하나 소개해보고자 합니다. 원래 _EXTRA는 키워드 상속(Keyword Inheritance)이라고 하는 좀 더 넓은 범위의 주제와 연관되는데, 원론적인 내용은 다소 방대하고 복잡하므로 나중에 기회가 되면 다시 다뤄보기로 하고 오늘은 구체적인 활용 예제 하나 정도만 살펴보도록 하겠습니다. 오늘 다뤄볼 예제는 NG 체계에서 그래픽 속성들(Properties)을 공통적으로 활용하도록 하여 프로그래밍을 좀 더 간편하게 해주는 예제입니다. 이 예제에서는 4종의 플롯들을 하나의 그래픽창에 2x2의 구조로 배치하게 됩니다. 그 과정은 다음과 같이 시작합니다.

 

x = FINDGEN(10)
y1 = 2*x
y2 = 5*x
y3 = -2*x + 40
y4 = 0.5*x^2

 

이와 같이 하나의 X 데이터를 기반으로 하는 4종의 Y 데이터들을 생성합니다. 그리고 각각에 대한 플롯을 하나의 그래픽창에 한꺼번에 표출하게 되는데 그 과정은 다음과 같습니다.

 

win = WINDOW(DIMENSIONS=[800, 800], /NO_TOOLBAR)
p1 = PLOT(x, y1, LINESTYLE=1, COLOR='tomato', SYMBOL='circle', $
  /SYM_FILLED, SYM_SIZE=0.7, YRANGE=[0, 50], $
  MARGIN=0.1, /CURRENT, LAYOUT=[2, 2, 1])
p2 = PLOT(x, y2, LINESTYLE=1, COLOR='tomato', SYMBOL='circle', $
  /SYM_FILLED, SYM_SIZE=0.7, YRANGE=[0, 50], $
  MARGIN=0.1, /CURRENT, LAYOUT=[2, 2, 2])
p3 = PLOT(x, y3, LINESTYLE=1, COLOR='tomato', SYMBOL='circle', $
  /SYM_FILLED, SYM_SIZE=0.7, YRANGE=[0, 50], $
  MARGIN=0.1, /CURRENT, LAYOUT=[2, 2, 3])
p4 = PLOT(x, y4, LINESTYLE=1, COLOR='tomato', SYMBOL='circle', $
  /SYM_FILLED, SYM_SIZE=0.7, YRANGE=[0, 50], $
  MARGIN=0.1, /CURRENT, LAYOUT=[2, 2, 4])

 

여기서는 이와 같이 각 플롯을 표출하는데 있어서 PLOT 함수를 사용하면서 LAYOUT 키워드를 사용하여 각 플롯의 그래픽창 내에서의 위치를 개별적으로 설정하였습니다. 그리고 각 플롯마다 여러가지 속성들을 설정하였는데요. 표출된 그림을 보면 다음과 같습니다.

 

 

그런데 여기서 4개의 플롯들을 표출하기 위하여 사용된 PLOT 함수들의 내용을 보면 XY 데이터 및 LAYOUT 키워드를 제외한 나머지 속성들은 다 동일합니다. 물론 위와 같이 코딩을 해도 아무 문제가 없지만, 여기서 _EXTRA 키워드를 사용하여 더 간편하게 코딩할 수도 있습니다. 먼저 다음과 같이 4개의 플롯들에서 공통적으로 사용되는 속성들을 구조체의 형태로 모아놓아야 합니다.

 

props = {current:1, margin:0.1, color:'tomato', $
  linestyle:1, symbol:'circle', $
  sym_filled:1, sym_size:0.7, yrange:[0, 50]}

 

여기서 정의된 props는 구조체(Structure)의 형태이며 이를 구성하는 각 항목은 4개의 PLOT 함수들에서 공통적으로 사용되는 그래픽 속성에 해당됩니다. 이와 같이 공통 속성들을 구조체로 모아둔 다음에는 PLOT 함수들을 다음과 같이 사용하면 됩니다. 즉 앞서 제시했던 그림 표출 과정을 다음과 같은 내용으로 바꾸면 됩니다.

 

win = WINDOW(DIMENSIONS=[800, 800], /NO_TOOLBAR)
p1 = PLOT(x, y1, LAYOUT=[2, 2, 1], _EXTRA=props)
p2 = PLOT(x, y2, LAYOUT=[2, 2, 2], _EXTRA=props)
p3 = PLOT(x, y3, LAYOUT=[2, 2, 3], _EXTRA=props)
p4 = PLOT(x, y4, LAYOUT=[2, 2, 4], _EXTRA=props)

 

이와 같이 각 PLOT 함수마다 _EXTRA 키워드를 사용하면서, 앞서 정의한 구조체 props를 이 키워드에 부여하면 됩니다. 어차피 표출 결과 그림은 똑같습니다. 이와 같이 공통적으로 적용되는 속성들만 따로 모아서 관리를 하면 코딩이 좀 더 간편해질 수 있다는 것을 염두에 두시면 좋을 것 같습니다.

반응형

'IDL > New Graphics' 카테고리의 다른 글

Scattered Bar Plot in 3D (?)  (0) 2022.06.10
SetData 메서드의 활용 예제 [1]  (0) 2022.05.25
컬러테이블만 표출하는 방법  (0) 2022.04.19
그림에 한글 표시하기 (NG 체계)  (0) 2022.04.12
POLARPLOT 함수 소개  (0) 2022.03.10