IDL/Direct Graphics

플롯(Plot) 상에 축과 데이터 추가하기 (DG 체계)

이상우_idl 2024. 10. 30. 14:45
728x90
반응형

지난 회차 게시물들에서는 플롯 그림을 표출한 상태에서 새로운 축과 데이터 플롯을 추가하는 작업을 NG(New Graphics) 체계에서 PLOT 함수 및 AXIS 함수를 사용하는 방법을 기준으로 몇가지 예제들과 함께 소개한 바 있습니다. 물론 이러한 작업은 NG 체계 뿐 아니라 DG(Direct Graphics) 체계에서도 가능하며 PLOT 프로시저 및 AXIS 프로시저를 사용하면 됩니다. 그래서 지난 회차 게시물들에서 소개했던 예제들과 유사한 그림을 DG 체계에서 구현해보면서 그 방법을 살펴보기로 하겠습니다. 먼저 예제 데이터를 생성하는 과정은 지난번과 같습니다.

 

x = FINDGEN(101)

y1 = SQRT(x)

y2 = (x/10)^2+100

 

먼저 x, y1에 대한 플롯부터 표출해봅시다. WINDOW 프로시저로 그래픽창을 띄우고 PLOT 프로시저로 플롯 그림을 표출하면 되는데, 그 과정은 다음과 같이 처리해봅니다.

 

DEVICE, DECOMPOSED=1
WINDOW, XSIZE=600, YSIZE=500
PLOT, x, y1, COLOR='000000'x, BACKGROUND='FFFFFF'x, /NODATA, $
  YSTYLE=4, XMARGIN=[8, 8], YMARGIN=[4, 4]

 

여기서는 YSTYLE 키워드의 값을 4로 설정함으로써 X축만 표시되고 Y축은 표시되지 않도록 하였습니다. 어차피 왼쪽 및 오른쪽의 Y축은 AXIS 프로시저를 사용하여 따로 표시할 예정이기 때문입니다. 일단 여기까지의 과정에 의한 표출 결과는 다음과 같습니다.

 

이제 왼쪽 및 오른쪽의 Y축을 추가하면서 해당 데이터 플롯도 함께 중첩해야 합니다. 먼저 x, y1 데이터에 대한 Y축 및 데이터의 표시를 위한 과정은 다음과 같이 AXIS 및 OPLOT 프로시저를 사용하여 처리해봅시다.

 

AXIS, YAXIS=0, COLOR='00CC00'x, YTITLE='Y1'
OPLOT, x, y1, COLOR='00CC00'x

 

먼저 AXIS 프로시저를 보면 YAXIS 키워드가 0으로 설정되어 있는데, 이것은 기존의 플롯 공간 내에서 Y축을 왼쪽에 표시하라는 의미입니다. 참고로 이 값이 1이면 Y축을 오른쪽에 표시하게 됩니다. 또한 OPLOT 프로시저를 사용하여 x, y1 데이터에 대한 플롯 선을 추가하도록 하였습니다. 또한 여기서 표시되는 Y축 및 플롯은 모두 초록색으로 처리하였습니다. 여기까지의 과정에 의한 표출 결과는 다음과 같습니다.

 

그 다음은 x, y2 데이터에 대한 Y축 및 플롯을 추가해야 합니다. 그 과정은 다음과 같이 처리해봅시다.

 

AXIS, YAXIS=1, COLOR='4763FF'x, YTITLE='Y2', $

  YRANGE=[100, 200], /SAVE
OPLOT, x, y2, COLOR='4763FF'x

 

일단 AXIS 프로시저의 내용을 보면 YAXIS 키워드의 값이 1로 설정되어 있습니다. 앞서 언급했듯이 기존의 플롯 공간 내에서 새로운 Y축이 오른쪽에 표시되도록 하기 위해서입니다. 그리고 새로운 Y축의 범위를 y2 데이터의 값 범위에 맞추기 위하여 YRANGE 키워드로 축 범위를 100~200으로 설정하였습니다. 그런데 여기서 /SAVE 키워드를 주목해야 합니다. 이 키워드의 역할은 지금 새로 추가되는 축의 범위를 기억해두라는 것인데, 이렇게 하면 바로 뒤에서 OPLOT 명령으로 x, y2 플롯을 중첩할 때 새로운 Y축의 범위인 100~200에 근거하여 플롯을 표시할 수 있게 됩니다. 만약 /SAVE 키워드를 사용하지 않을 경우에는 지금 새로 표시되는 오른쪽의 Y축은 겉모습으로는 범위가 100~200이긴 하지만 내부적으로는 기존 플롯의 Y축 범위인 0~10인 상태가 지속됩니다. 따라서 만약 위의 AXIS 명령에서 /SAVE 키워드를 사용하지 않는 경우를 가정해보면 그 결과는 다음과 같습니다.

 

즉 새로운 Y축이 오른쪽에 표시되긴 했지만 새로운 플롯(x, y2)는 표시되지 않았습니다. 엄밀히 말하면 표시는 되어 있습니다. 다만 어딘가 완전히 다른 위치에 표시되어 있으므로 여기서는 보이지않을 뿐입니다. 따라서 이제 다시 /SAVE 키워드를 살려놓고 원래 의도했던대로 실행해보면 결과는 다음과 같을 것입니다.

 

따라서 DG 체계에서 AXIS 프로시저를 사용하여 새로운 축을 추가하는 방법은 대략 위와 같습니다. 그러면 이번에는 새로운 데이터인 y3을 생성하여 x, y3 데이터에 대한 Y축 및 플롯을 추가하는 작업을 진행해봅시다. 전체적인 과정은 위의 내용과 거의 유사합니다. 다만 그래픽창을 가로 방향으로 더 길게 만들고 기본 플롯의 오른쪽 여백을 더 확장할 필요가 있습니다. 그리고 AXIS 명령을 한번 더 사용해야 한다는 차이점도 있습니다. 전체적인 과정은 다음과 같습니다.

 

x = FINDGEN(101)
y1 = SQRT(x)
y2 = (x/10)^2+100

y3 = SIN(x*7.2*!DTOR)
DEVICE, DECOMPOSED=1
WINDOW, XSIZE=800, YSIZE=500
PLOT, x, y1, COLOR='000000'x, BACKGROUND='FFFFFF'x, /NODATA, $
  YSTYLE=4, XMARGIN=[8, 18], YMARGIN=[4, 4]
AXIS, YAXIS=0, COLOR='00CC00'x, YTITLE='Y1'
OPLOT, x, y1, COLOR='00CC00'x
AXIS, YAXIS=1, COLOR='4763FF'x, YTITLE='Y2', $

  YRANGE=[100, 200], /SAVE
OPLOT, x, y2, COLOR='4763FF'x
AXIS, 114, 0, YAXIS=1, COLOR='FF0000'x, YTITLE='Y3', $

  YRANGE=[-1, 1], /SAVE
OPLOT, x, y3, COLOR='FF0000'x

 

여기서 새로 추가되는 y3 데이터는 값 범위가 -1~1이므로 새로운 Y축도 여기에 맞춰야 합니다. 따라서 맨 마지막의 AXIS 명령을 보면 YRANGE 키워드를 통하여 범위가 이와 같이 설정된 것이 보입니다. 그리고 여기서 또 눈여겨봐야 할 부분은 AXIS 명령의 인수가 114, 0으로 되어 있다는 것인데요. 이것은 새로운 Y축의 위치를 기존 플롯의 좌표계 기준으로 (114, 0)으로 설정한 것입니다. 즉 새로운 Y축의 위치는 기존 플롯의 X축에서 114라는 값에 해당되는 위치가 되도록 한 것으로 기존 플롯의 우측 바깥쪽으로 적절하게 위치하도록 설정한 것입니다. 따라서 위의 내용을 실행하면 그 결과는 다음 그림과 같습니다.

 

여기까지 소개한 예제들은 모두 Y축을 새로 추가하는 경우들이었는데, 물론 X축의 추가도 당연히 가능합니다. AXIS 프로시저를 사용하여 새로운 X축을 추가하는 예제 및 표출 결과 그림은 다음과 같습니다. 축의 위치만 다를 뿐 기본적인 원리는 Y축을 추가하는 경우와 유사하므로 예제 코드에 대한 자세한 설명은 생략합니다. 다만 X축을 추가하는 경우에는 XAXIS 키워드를 사용한다는 점 그리고 AXIS 명령의 인수는 0, -1.4와 같은 방식으로 설정하여 X축이 위치할 Y좌표를 지정해주면 된다는 점 등을 유의하면 됩니다.

 

x1 = FINDGEN(101)
x2 = FINDGEN(101)*0.15+50
x3 = FINDGEN(101)*6+3000
y = SIN(x*7.2*!DTOR)
WINDOW, XSIZE=600, YSIZE=500
PLOT, x1, y, COLOR='000000'x, BACKGROUND='FFFFFF'x, $
  XTITLE='X1', XMARGIN=[8, 8], YMARGIN=[14, 2]
AXIS, 0, -1.4, XAXIS=0, COLOR='4763FF'x, XTITLE='X2', XRANGE=[50, 65]
AXIS, 0, -1.8, XAXIS=0, COLOR='FF0000'x, XTITLE='X3', XRANGE=[3000, 3600]

 

 

 

 

이 글이 도움이 되었다면 게시물에 대하여 공감 버튼(하트 모양) 클릭 및 블로그 구독도 해주시면 더 큰 힘이 됩니다. 감사합니다.

반응형