IDL/New Graphics

계단형 플롯 표출하기

이상우_IDL 2025. 10. 13. 18:14
728x90

플롯 계열의 함수들 중 가장 기본적인 역할을 하는 PLOT 함수를 사용하는 방법은 이미 알려진 것들이 많이 있습니다. 그리고 플롯이 표출되는 형태를 보면 데이터 포인트들을 선으로 이어주거나 또는 포인트 자체를 특정한 기호(원형, 사각형 등)로 표시하는 등의 방식이 일반적입니다. 그런데 필요에 따라서는 그 모습이 마치 계단(Staircase)처럼 보이는 계단형 플롯을 구현하는 것도 가능합니다. 이를 위해서는 PLOT 함수의 STAIRSTEP 속성을 사용하면 됩니다. 그러면 간단한 예제를 통하여 그 방법을 살펴봅시다. 먼저 예제 데이터를 다음과 같이 생성합니다.

X = FINDGEN(21)
Y = SIN(x/2)*0.8

이와 같이 사인(Sine) 곡선의 궤적을 따라가는 21개의 포인트들로 구성된 데이터를 생성합니다. 다만 이번에는 일반적인 형태의 플롯이 아닌 계단형 플롯의 형태로 표출해야 합니다. 그에 맞는 처리 과정은 다음과 같습니다.

win = WINDOW(DIMENSIONS=[600, 500], /NO_TOOLBAR)
p = PLOT(x, y, XRANGE=[0, 20], /STAIRSTEP, COLOR='sea green', $
  THICK=3, FONT_SIZE=11, MARGIN=0.1, /CURRENT)

여기서는 플롯을 계단형으로 표출하기 위하여 PLOT 함수를 STAIRSTEP 속성과 함께 사용해야 한다는 것을 유념하면 됩니다. 이러한 과정에 의하여 표출된 결과는 다음 그림과 같습니다.

 

 

이와 같이 계단 형태의 플롯으로 표출됩니다. 플롯이 이와 같이 계단형으로 표출될 경우에는 각 데이터 포인트는 계단별 수평선의 중심에 위치하는 방식으로 표시되는 것이 기본입니다. 이러한 계단별 수평선과 실제 포인트의 위치 사이의 관계를 눈으로 직접 확인해보기 위하여 포인트들만 원형 기호로 표시되는 플롯을 중첩해봅시다. 이를 위해서는 다음과 같은 내용을 추가하면 됩니다.

 

po = PLOT(x, y, SYMBOL='circle', SYM_SIZE=1.5, /SYM_FILLED, $
  SYM_COLOR='sea green', LINESTYLE=6, /OVERPLOT)

 

이러한 내용까지 추가로 실행하면 그 결과는 다음 그림과 같습니다.

 

 

그런데 만약 각 포인트가 수평선의 중심이 아닌 끝부분에 위치하도록 하고 싶다면 어떻게 하면 될까요? 그런 경우에는 계단형 플롯을 표시할 때 X축의 좌표값들을 살짝 이동시켜주면 됩니다. 앞서 표출된 플롯들을 보면 X축의 작은 눈금들의 간격이 1이기 때문에 계단형 플롯 자체를 X축 방향으로 0.5만큼 이동시키면 될 것 같습니다. 그러면 앞서 계단형 플롯을 표출하는 역할을 했던 PLOT 함수의 내용만 다음과 같이 수정해봅시다.

 

p = PLOT(x+0.5, y, XRANGE=[0, 20], /STAIRSTEP, COLOR='sea green', $
  THICK=3, FONT_SIZE=11, MARGIN=0.1, /CURRENT)

 

여기서는 x 대신 x+0.5를 사용하였습니다. 즉 계단형 플롯을 표출하는데 있어서 X 좌표값들을 일제히 0.5씩 증가시킨 것입니다. 이러한 수정사항을 반영하여 다시 실행해보면 그 결과는 다음 그림과 같습니다.

 

 

이와 같이 각 포인트는 계단형 수평선의 왼쪽 끝에 위치하게 됩니다. 비슷한 요령으로 이번에는 x 대신 x-0.5를 사용해봅시다. 즉 계단형 플롯을 표출하는데 있어서 X 좌표값들을 일제히 0.5씩 감소시키는 것입니다. 그러면 결과는 다음 그림과 같습니다.

 

 

그러면 이와 같이 각 포인트는 계단형 수평선의 오른쪽 끝에 위치하게 됩니다. 이러한 그림들을 보면 계단형 플롯을 표시하는 방법 자체도 몇가지로 더 세분화될 수 있을 것 같습니다. 물론 어떤 방법을 택할 것인지에 대한 판단은 유저의 몫입니다. 어쨌든 PLOT 함수에서 지원되는 여러가지 세부 기능들 중 이런 것도 있다는 것을 참조해두시면 좋을 것 같습니다.

 

 

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

LIST