오늘은 IDL에서 BARPLOT 함수를 이용하여 막대 그래프를 표출하는데 있어서 서로 다른 두 종류의 데이터에 대한 막대 그래프 그림을 서로 붙여서 표출하는 예제를 소개해보고자 합니다. 먼저 이를 위하여 필요한 두 종류의 예제 데이터를 다음과 같이 생성해봅시다.
n = 10000
data1 = RANDOMN(-1, n)*10
data2 = RANDOMN(-2, n)*20+5
여기서 생성된 data1 및 data2는 모두 정규 분포를 하는 10000개의 값들로 구성된 1차원 배열인데, data1은 평균 및 표준편차가 각각 0 및 10이고 data2는 평균 및 표준편차가 각각 5 및 20인 데이터입니다. 그리고 각 데이터에 대한 분포 자료를 얻기 위하여 HISTOGRAM 함수를 다음과 같이 사용합니다.
bsz = 10
h1 = HISTOGRAM(data1, BINSIZE=bsz, MIN=-80, MAX=80, LOCATIONS=loc1)
h2 = HISTOGRAM(data2, BINSIZE=bsz, MIN=-80, MAX=80, LOCATIONS=loc2)
여기서는 data1 및 data2에 대하여 -80~80의 범위를 10의 간격으로 나눈 구간들에 대한 빈도를 산출한 결과를 h1 및 h2로 얻었습니다. 이제 그래픽 창을 띄우고 두 데이터에 대하여 각각 BARPLOT 함수를 적용하여 함께 표출해봅시다. 이 때 h1 및 h2에 대한 그림을 각각 상단 및 하단에 배치하면서 두 그림 사이에 틈새가 없도록 서로 붙여보고자 합니다. 또한 하단의 그림에 대해서는 Y축의 방향을 뒤집어서 마치 막대들이 천장에 붙어서 아래로 향하는 모습이 되도록 구현하려고 합니다. 이러한 표출 과정은 다음과 같이 시작합니다.
win1 = WINDOW(DIMENSIONS=[800, 600], /NO_TOOLBAR)
p1a = BARPLOT(loc1+bsz/2., h1, FILL_COLOR='chartreuse', $
XRANGE=[-80, 80], XMINOR=0, XTICKINTERVAL=10, XTICKLEN=0.01, $
YTICKLEN=0.02, XSHOWTEXT=0, MARGIN=[0.1, 0, 0.05, 0.15], $
FONT_SIZE=10, /CURRENT, LAYOUT=[1, 2, 1])
ax1 = p1a.AXES
ax1[2].SHOWTEXT = 1
일단 이 내용은 그래픽 창의 상단에 첫번째 데이터(data1)에 대한 막대 그래프를 표출하는 과정입니다. 일단 이 그림에서는 Y축은 뒤집히지 않은 정방향입니다. 그리고 BARPLOT 함수 내에서 XSHOWTEXT 속성을 0으로 설정하여 그림 내 하단의 X축의 눈금 문자들이 표시되지 않도록 하였습니다. 그 대신 상단의 X축에 눈금 문자들이 표시되도록 하는 내용을 추가하였습니다. 나중에 하단에 두번째 그림을 붙여야 한다는 것을 사전에 고려한 것입니다. 일단 여기까지의 과정에 의하여 표출된 그림을 보면 다음과 같습니다.

그럼 이제는 그래픽 창의 하단에 두번째 데이터(data2)에 대한 그림을 표출하는 과정으로 진행해봅시다. 이를 위하여 다음과 같은 내용을 추가합니다.
p1b = BARPLOT(loc2+bsz/2., h2, FILL_COLOR='salmon', $
XRANGE=[-80, 80], XMINOR=0, XTICKINTERVAL=10, XTICKLEN=0.01, $
YTICKLEN=0.02, XTITLE='Data Value', MARGIN=[0.1, 0.15, 0.05, 0], $
FONT_SIZE=10, /CURRENT, LAYOUT=[1, 2, 2])
yrn = p1b.YRANGE
p1b.YRANGE = [yrn[1], yrn[0]]
여기서는 첫번째 그림의 바로 아래에 두번째 그림을 붙여서 표출한 다음 이 그림의 Y축의 범위를 뒤집기 위한 내용이 추가로 실행되었음을 유의하면 됩니다. 즉 위에서 볼드체로 표시된 내용은 일단 BARPLOT 함수로 표출된 그림으로부터 Y축 범위 정보를 가져온 다음 원래의 상한 및 하한 값을 뒤집어서 설정을 다시 한 것입니다. 어쨌든 여기까지의 내용이 모두 실행되면 그 결과는 다음 그림과 같습니다.

이와 같이 두 종류의 데이터에 대한 막대 그래프를 상단 및 하단에 서로 붙여서 표출할 수 있습니다. 그런데 이러한 표출에 있어서 막대들의 방향이 수직이 아닌 수평 방향이 되도록 하는 것도 가능합니다. 이를 위해서는 BARPLOT 함수의 HORIZONTAL 속성을 활용하면 됩니다(관련 게시물 참조). 물론 X축 및 Y축의 세부 속성들을 서로 맞바꾸는 것도 추가로 필요합니다. 그러면 위의 예제에서 사용한 데이터를 그대로 사용하여 막대들이 수평 방향인 그림을 좌우로 붙여서 표출해보기로 합니다. 먼저 새로운 그래픽 창을 띄우고 data1에 대한 그림을 그래픽 창의 좌측에 표출하는 과정부터 시작하면 그 내용은 다음과 같습니다.
win2 = WINDOW(DIMENSIONS=[800, 600], /NO_TOOLBAR)
p2a = BARPLOT(loc1+bsz/2., h1, FILL_COLOR='chartreuse', $
YRANGE=[-80, 80], YTICKINTERVAL=10, YMINOR=0, $
YTICKLEN=0.01, XTICKLEN=0.02, YTITLE='Data Value', $
FONT_SIZE=10, MARGIN=[0.15, 0.05, 0, 0.05], $
/CURRENT, LAYOUT=[2, 1, 1], /HORIZONTAL)
xrn = p2a.XRANGE
p2a.XRANGE = [xrn[1], xrn[0]]
여기서는 X축의 범위를 뒤집기 위한 내용이 추가로 실행되었음을 주목하면 됩니다. 일단 여기까지의 내용만 실행한 결과는 다음 그림과 같습니다.

바로 이어서 그래픽 창의 우측에 두번째 데이터(data2)에 대한 그림을 표출하는 과정으로 진행해봅시다. 이를 위하여 다음과 같은 내용을 추가합니다.
p2b = BARPLOT(loc2+bsz/2., h2, FILL_COLOR='salmon', $
YRANGE=[-80, 80], YTICKINTERVAL=10, YMINOR=0, $
YTICKLEN=0.01, XTICKLEN=0.02, YSHOWTEXT=0, $
FONT_SIZE=10, MARGIN=[0, 0.05, 0.15, 0.05], $
/CURRENT, LAYOUT=[2, 1, 2], /HORIZONTAL)
ax2 = p2b.AXES
ax2[3].SHOWTEXT = 1
여기서는 첫번째 그림의 바로 우측에 두번째 그림을 붙여서 표출한 다음 이 그림의 Y축의 눈금 문자들이 그림의 좌측 대신 우측에 표시되도록 하는 내용이 추가로 실행되었음을 유의하면 됩니다. 여기까지의 내용이 모두 실행되면 그 결과는 다음 그림과 같습니다.

이와 같이 막대들이 수평 방향인 형태로도 구현할 수 있음을 참조해두시면 좋을 것 같습니다.
* 이 글이 도움이 되었다면 게시물에 대하여 공감 버튼(하트 모양) 클릭 및 블로그 구독도 해주시면 더 큰 힘이 됩니다. 감사합니다.
'IDL > New Graphics' 카테고리의 다른 글
| 막대 차트(Bar Chart) 표출하기 (0) | 2025.12.09 |
|---|---|
| BOXPLOT 함수 소개 (0) | 2025.12.03 |
| 바코드 형태의 이미지의 표출 및 응용 [2] (0) | 2025.11.17 |
| 바코드 형태의 이미지의 표출 및 응용 [1] (0) | 2025.11.11 |
| 색상을 채운 플롯(Filled Plot)의 표출 [3] (0) | 2025.11.05 |