IDL/New Graphics

IDL에서 파이 차트(Pie Chart)를 그려봅시다

이상우_IDL 2015. 5. 21. 10:00
728x90

IDL에서 New Graphics 체계가 도입된 이후로 BARPLOT, SCATTERPLOT, BUBBLEPLOT, ERRORPLOT, ELLIPSE 등 기존에는 없었던 방식의 표출 기능을 지원하는 그래픽 함수들이 꾸준히 보강되어 오고 있는데요. 원형을 섹터로 나눠서 각 항목별 비중을 나타내는 표출 방식, 즉 이른바 파이 차트(Pie Chart)라고 부르는 표출 방식은 아직 공식적으로는 지원이 되지 않고 있습니다. 차기 버전에서 지원이 될지는 모르겠지만, 지금의 IDL에서 지원되는 기능들을 몇가지만 응용하면 충분히 구현이 가능할 것 같아서 한번 해봤습니다. 그래서 DRAW_PIE_PIECE라는 이름의 프로시저를 제가 직접 하나 만들어봤는데요. 우선 이것을 사용하여 그린 결과물 예제는 다음 그림과 같습니다.



보시다시피 아주 울트라 하이 퀄리티라고 봐주긴 좀 민망하지만 그럭저럭 봐줄만한 정도의 결과물은 나오는 것 같습니다(적어도 제 생각엔). 이 그림을 그리기 위해서는 위에서 언급한 DRAW_PIE_PIECE라는 프로시저를 다음과 같이 사용하였습니다.


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

DRAW_PIE_PIECE, 20, 80, 240, [300, 300], FILL_COLOR='light blue', $

  CAPTION='Sector 1', TEXT_COLOR='black', TEXT_FONT_SIZE=16, $

  /DEVICE

DRAW_PIE_PIECE, 80, 140, 240, [300, 300], FILL_COLOR='light gray', $

  CAPTION='Sector 2', TEXT_COLOR='black', TEXT_FONT_SIZE=16, $

  /DEVICE

DRAW_PIE_PIECE, 140, 290, 240, [300, 300], FILL_COLOR='gold', $

  CAPTION='Sector 3', TEXT_COLOR='black', TEXT_FONT_SIZE=16, $

  /DEVICE

DRAW_PIE_PIECE, 290, 20, 240, [300, 300], FILL_COLOR='light green', $

  CAPTION='Sector 4', TEXT_COLOR='black', TEXT_FONT_SIZE=16, $

  /DEVICE


여기서는 600X600의 크기를 갖는 그래픽창에서 중심점이 [300, 300]에 위치한 원의 원호를 이루는 파이 조각 네 개를 그려봤습니다. 이 DRAW_PIE_PIECE의 사용법은 첨부된 프로그램 파일의 앞부분에 나와 있습니다. 간단하게 언급해보면, 마치 부채꼴처럼 생긴 파이 조각을 그린다고 할 때 인자들의 순서는 시작 각도, 끝 각도, 반경, 중심좌표가 됩니다. 여기서 각도는 시계로 따지면 12시 방향을 기준으로 시계 방향으로 0~360도에 해당되는 값을 넣으면 됩니다. 반경은 말 그대로 파이의 원호 궤적에 해당되는 원의 반경이 되고, 중심좌표는 그 원의 중심에 해당되는 X, Y 좌표값을 [X, Y]와 같은 형태로 주면 됩니다.


그 외에 자잘한 키워드들이 몇 개 더 있습니다. 위에서 언급된 값들이 어떤 좌표계 기반인지를 /DATA, /DEVICE, /NORMAL 중 하나로 셋팅할 수 있습니다. CAPTION 키워드는 파이 조각안에 캡션 문자를 삽입할 경우 그 내용을 문자값으로 받을 수 있습니다. FILL_COLOR는 파이 내부를 채울 색상의 이름이고, TEXT_FONT_SIZE는 삽입 문자의 크기를 나타냅니다. 그리고 전반적인 내용으니 위의 예제와 같지만, 아래와 같이 TEXT_RADIAL이란 키워드를 추가적으로 사용할 경우에는, 아래 그림처럼 캡션 문자의 기저 방향이 마치 방사상으로 뻗어나가는 듯한 형태를 띄게 됩니다. 물론 처음에 봤던 위의 그림은 이 키워드를 사용하지 않을 경우에 해당됩니다.


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

DRAW_PIE_PIECE, 20, 80, 240, [300, 300], FILL_COLOR='light blue', $

  CAPTION='Sector 1', TEXT_COLOR='black', TEXT_FONT_SIZE=16, $

  /TEXT_RADIAL, /DEVICE

DRAW_PIE_PIECE, 80, 140, 240, [300, 300], FILL_COLOR='light gray', $

  CAPTION='Sector 2', TEXT_COLOR='black', TEXT_FONT_SIZE=16, $

  /TEXT_RADIAL, /DEVICE

DRAW_PIE_PIECE, 140, 290, 240, [300, 300], FILL_COLOR='gold', $

  CAPTION='Sector 3', TEXT_COLOR='black', TEXT_FONT_SIZE=16, $

  /TEXT_RADIAL, /DEVICE

DRAW_PIE_PIECE, 290, 20, 240, [300, 300], FILL_COLOR='light green', $

  CAPTION='Sector 4', TEXT_COLOR='black', TEXT_FONT_SIZE=16, $

  /TEXT_RADIAL, /DEVICE



하여간 처음 만들어본 프로시저이기 때문에 향후에 좀 더 보강을 해볼 여지는 충분할 것 같습니다. 물론 NG 체계 그래픽에 대한 어느 정도의 지식만 있다면, 이 프로시저의 내용을 직접 수정하여 사용하는 것도 가능합니다. 우리가 흔히 다른 웹사이트에 볼 수 있는 정말 팬시한 정도까지는 아니겠지만, 그냥 IDL의 그래픽 기능을 갖고도 이 정도까지는 구현이 가능하다는 점을 염두에 두고 사용해보시면 좋겠습니다. DRAW_PIE_PIECE.pro 파일은 아래에 첨부하였습니다.


draw_pie_piece.pro



draw_pie_piece.pro
0.0MB
LIST