IDL/New Graphics

새로운 그래픽의 Plot 기능 소개 [3]

이상우_IDL 2011. 6. 6. 17:28
728x90
IDL 8.0 이상의 버전에서부터 새롭게 사용 가능한 그래픽 기능들 중 플롯과 관련된 것들을 순차적으로 소개하고 있습니다. 오늘은 Bar Plot을 그리는 기능에 대해서 소개해드리겠습니다. 기존 다이렉트 그래픽 체계에서도 BAR_PLOT이라는 프로시저가 있긴 했지만, 오늘은 BARPLOT이라는 그래픽 함수의 사용법 및 예제들을 살펴볼까 합니다. 두 가지 예제를 볼텐데 먼저 첫번째 예제에 해당되는 그림부터 보기로 하죠.


지금 보시는 그림은 어떤 프로야구팀의 월별 승패의 추이를 Bar Plot의 형태로 나타내어본 것입니다. 먼저 이 그림을 그리기 위하여 사용된 데이터는 다음과 같이 월, 월별승수, 월별패수 세가지입니다.

months = 4 + INDGEN(7)

w = [6, 11, 7, 14, 18, 9, 7]

l = [13, 10, 13, 7, 4, 10, 6]


그림을 그리기 위한 적당한 크기의 윈도우를 WINDOW 함수를 이용하여 띄웁니다.

win1 = WINDOW(DIMENSIONS=[600, 400])


이제 BARPLOT 함수를 사용하여 첫번째 항목인 월별승수에 해당되는 부분을 표출합니다.

b1 = BARPLOT(months, w, INDEX=0, NBARS=2, FILL_COLOR='Gold', YRANGE=[0, 20], $

  XTICKINTERVAL=1, XMINOR=0, XTITLE='Month', YTITLE='Number', TITLE='Monthly Win/Lose', $

  NAME='Win', /CURRENT)


여기서 처음 두 인자는 플롯의 X, Y에 해당되는 months, w가 사용되었습니다. INDEX라는 속성은 이 그림과 같이 나란한 Bar Plot을 그릴 때 몇번째 항목에 해당되는가를 나타냅니다. 여기서는 월별승수가 0이고 월별패수는 1이 됩니다. 나머지 항목들은 별다른 것이 없는데 뒷부분에 NAME이라는 속성이 있습니다. 이것은 나중에 Legend를 표시하게 될 때 해당항목의 이름에 해당됩니다. 따라서 Legend를 표출하게 될 경우에만 필요한 속성이긴 합니다.

이어서 두번째 항목인 월별패수에 해당되는 부분을 표출합니다. 앞서 그렸던 플롯상에 중첩해야 하므로 /OVERPLOT 속성이 꼭 사용되어야 합니다.

b2 = BARPLOT(months, l, INDEX=1, NBARS=2, FILL_COLOR='Magenta', NAME='Lose', /OVERPLOT)


그려진 두 항목에 대한 설명을 위하여 LEGEND 함수를 사용하여 Legend를 표출합니다. 여기서 TARGET 속성은 앞서 표출한 두 플롯이 되고, POSITION 속성은 Legend 박스의 왼쪽상단 구석부분의 좌표를 뜻합니다.

leg = LEGEND(TARGET=[b1, b2], POSITION=[3.2, 19], FONT_SIZE=12, /DATA)


이와 같은 과정들만 거치면 앞서 본 것과 같은 형태의 Bar Plot을 비교적 쉽게 그릴 수 있습니다. 이번에는 약간 다른 형태의 Bar Plot을 그려볼텐데요. 그림을 먼저 보면 다음과 같습니다. 이런 형태의 그림도 많이 쓰이죠. 이 그림의 경우는 어떤 회사의 2001년부터 2010년까지 연도별 상반기 및 하반기의 매출 및 연간총매출액을 나타내는 예제입니다.


먼저 이 그림을 그리기 위하여 사용된 예제 데이터는 다음과 같이 연도, 연도별 상반기 매출액, 연도별 하반기 매출액입니다.

yrs = 2001 + INDGEN(10)

h1 = [100, 200, 200, 400, 750, 600, 650, 550, 300, 250]

h2 = [200, 150, 300, 250, 550, 500, 600, 450, 350, 100]


그림을 그리기 위한 적당한 크기의 또 다른 윈도우를 다음과 같이 띄웁니다.

win2 = WINDOW(DIMENSIONS=[600, 400])


먼저 연도별 상반기 매출액에 해당되는 플롯을 그리기 위하여 다음과 같이 BARPLOT 함수를 사용합니다.

b1 = BARPLOT(yrs, h1, FILL_COLOR='blue', YRANGE=[0, 1500], XTICKINTERVAL=1, XMINOR=0, $

  XTITLE='Year', YTITLE='Revenue (10,000 Won)', TITLE='Last 10-Years Revenue', $

  NAME='First Half', /CURRENT)


이 내용을 보면 앞선 첫번째 예제에서와 거의 유사합니다. 다만 INDEX 속성은 빠져있습니다. 이러한 형태의 Bar Plot에서는 이 속성은 필요가 없습니다.

이어서 두번째 항목인 연도별 하반기 매출액을 표출합니다. 이 때 Y에 해당되는 인자는 하반기 매출액인 h2만 들어가는 것이 아니고 상반기 매출액인 h1도 합쳐진 채로 들어가야함을 유의해야 합니다. 그리고 BOTTOM_VALUES라는 속성에 h1이 지정되어 있는데, 이는 두번째 항목을 표출할 때 그 바닥값을 첫번째 항목인 h1으로 하겠다는 의미입니다. 이렇게 해야 우리가 의도하는 형태로 그림이 그려집니다. 물론 앞서 그렸던 플롯상에 중첩해야 하므로 /OVERPLOT 속성도 꼭 사용되어야 합니다.

b2 = BARPLOT(yrs, h1+h2, BOTTOM_VALUES=h1, FILL_COLOR='green', NAME='Second Half', /OVERPLOT)


이제 그려진 두 항목에 대한 설명을 위하여 LEGEND 함수를 사용하여 Legend를 표출합니다.

이와 같은 과정들만 거치면 됩니다. 만약에 색상에 gradation을 넣고 싶다면 BOTTOM_COLOR 속성을 사용하면 됩니다. 예를 들어 각 막대마다 아랫부분의 색상을 흰색으로 부드럽게 표현하고 싶다면 다음과 같이 속성을 설정해주면 됩니다.

b1.BOTTOM_COLOR = 'white'

b2.BOTTOM_COLOR = 'white'


그러면 다음 그림과 같이 두 가지 색상이 서서히 변하는 형태로 그림이 그려집니다.


이 두 예제그림들을 그리는 내용을 담은 예제코드를 아래에 첨부합니다.



test_bar_plot_20110606.pro
0.0MB
LIST