줄기형 플롯(Stem Plot)은 각 데이터 포인트로부터 세로 또는 가로 방향의 선이 마치 줄기처럼 뻗어 있는 듯한 모습으로 구현되는 플롯을 의미합니다. 그런데 사실 IDL의 그래픽 기능 함수들 중에는 이러한 형태의 플롯을 구현할 수 있도록 해주는 전용 함수는 없습니다. 다만 우회적인 방법을 이용하여 이러한 줄기형 플롯을 구현하는 것은 가능은 합니다. 바로 PLOT 함수 및 BARPLOT 함수를 적절히 혼용하는 방법인데, 이러한 방식을 사용하면 거의 비슷하게 구현이 가능합니다. 그러면 가상의 x, y 데이터를 정의하고 이를 줄기형 플롯으로 구현하는 예제를 살펴봅시다. 일단 데이터 포인트들이 정사각형 기호로 표시되는 플롯을 먼저 표출합니다. 그 시작 과정은 다음과 같습니다.
x = FINDGEN(21)
y = SIN(x/2)*0.8
win = WINDOW(DIMENSIONS=[600, 500], /NO_TOOLBAR)
p = PLOT(x, y, SYMBOL='square', SYM_SIZE=1.5, /SYM_FILLED, $
SYM_COLOR='green', LINESTYLE=6, FONT_SIZE=11, $
MARGIN=0.1, /CURRENT)
일단 여기까지의 과정에 의하여 표출되는 그림은 다음과 같습니다.

일단 여기까지는 PLOT 함수를 사용하여 데이터 포인트들을 정사각형의 기호로 표시하였고, 줄기에 해당되는 부분은 아직 구현되지 않은 상태입니다. 이제 줄기 부분을 표시해야 하는데 이를 위하여 BARPLOT 함수를 추가로 사용하면 됩니다. 이를 위하여 다음과 같은 내용을 추가합니다.
po = BARPLOT(x, y, COLOR='green', WIDTH=0.1, /OVERPLOT)
여기서는 BARPLOT 함수를 사용하여 동일한 데이터에 대한 막대형 플롯을 중첩하였습니다. 다만 중요한 것은 WIDTH 속성을 0.1과 같은 작은 값으로 설정하여 막대 자체의 두께를 매우 얇게 만들어 마치 선처럼 보이도록 했다는 것입니다. 실제로 표출된 그림을 보면 다음과 같습니다.

이 그림을 보면 나름 그럴싸하게 구현된 것 같습니다. 다만 이 그림에서는 줄기 선이 출발하는 기준 위치가 Y축의 값이 0인 수평선임을 확인할 수 있는데, 이는 BARPLOT 함수에서 막대들의 출발점이 되는 기준 좌표가 Y축의 값이 0인 수평선이 되는 것이 디폴트이기 때문입니다. 만약 그 출발점이 다른 값이 되도록 하려면 BARPLOT 함수에서 BOTTOM_VALUES 속성을 따로 설정하면 됩니다. 그러면 이번에는 이 속성의 값을 다음과 같이 -1로 설정해봅시다. 이를 위해서는 위에서 BARPLOT 함수의 내용을 다음과 같이 변경하면 됩니다.
po = BARPLOT(x, y, COLOR='green', WIDTH=0.1, BOTTOM_VALUES=-1, /OVERPLOT)
그 결과는 다음 그림과 같습니다.

이와 같은 줄기형 플롯은 줄기들의 방향이 위와 같은 수직 방향이 아닌 수평 방향이 되도록 구현하는 것도 가능합니다. 이를 위한 과정은 위의 내용과 전반적으로 유사하지만, PLOT 함수를 사용할 때 x와 y를 바꿔줘야 한다는 점 및 BARPLOT 함수를 사용할 때 /HORIZONTAL 속성을 사용해야 한다는 점 등이 중요한 핵심이 됩니다. 그 내용은 다음과 같습니다.
win = WINDOW(DIMENSIONS=[600, 500], /NO_TOOLBAR)
p = PLOT(y, x, SYMBOL='square', SYM_SIZE=1.5, $
/SYM_FILLED, SYM_COLOR='green', LINESTYLE=6, $
FONT_SIZE=11, MARGIN=0.1, /CURRENT)
po = BARPLOT(x, y, COLOR='green', WIDTH=0.1, BOTTOM_VALUES=-1, $
/HORIZONTAL, /OVERPLOT)
여기서는 앞서 언급했던 중요한 차이점들을 주목하면 됩니다. 실행 결과는 다음 그림과 같습니다.

어쨌든 여기서 소개한 방법을 이용하면 IDL에서도 줄기형 플롯(Stem Plot)을 제법 그럴싸하게 구현할 수 있다는 것을 참조해두시면 좋을 것 같습니다.
* 이 글이 도움이 되었다면 게시물에 대하여 공감 버튼(하트 모양) 클릭 및 블로그 구독도 해주시면 더 큰 힘이 됩니다. 감사합니다.
'IDL > New Graphics' 카테고리의 다른 글
| 색상을 채운 플롯(Filled Plot)의 표출 [3] (0) | 2025.11.05 |
|---|---|
| 이미지(Image)를 격자(Grid)와 함께 표시하기 (0) | 2025.10.28 |
| 패턴(Pattern)을 이용한 색상 채우기 (0) | 2025.10.15 |
| 계단형 플롯 표출하기 (0) | 2025.10.13 |
| 축(Axis)의 범위 뒤집기 (0) | 2025.10.01 |