IDL/Python in IDL

파이썬 기능을 사용하여 플롯(Plot) 그리기

이상우_IDL 2025. 9. 8. 17:57
728x90

지난번에 IDL 9.2에서 파이썬 기능을 활용하여 파이 차트(Pie Chart) 그림을 표출하는 예제를 소개하는 게시물을 올린 바 있습니다. 여기서는 그림의 생성 및 표출을 위하여 IDL 9.2에 기본 내장된 파이썬 기능을 사용하면서 Matplotlib 라이브러리를 추가적으로 설치하고 작업을 진행하였습니다. 오늘은 IDL 9.2에서 파이썬 기능을 활용하여 플롯을 표출하는 예제를 소개해보고자 합니다. 역시 이 작업에서도 Matplotlib 라이브러리가 필요하므로, 앞서 언급한 게시물의 내용에서와 같이 Matplotlib 라이브러리를 추가로 설치한 상태를 가정하고 진행합니다.

 

사실 플롯을 표출하는 작업 자체는 그냥 IDL에서도 충분히 할 수 있습니다만, 오늘 소개할 내용에서는 예제 데이터는 IDL로 생성하고 표출 및 그림 저장 등의 작업을 파이썬 기능으로 수행하는 방식으로 진행해보고자 합니다. 그러면 먼저 예제 데이터를 생성하는 작업을 다음과 같이 진행합시다.

 

x = FINDGEN(101)
y1 = SQRT(x)+2*RANDOMU(-1, N_ELEMENTS(x))
y2 = SQRT(x)/2+1.5*RANDOMU(-2, N_ELEMENTS(x))

 

여기서는 동일한 X 데이터인 x와 대응되는 두 종류의 Y 데이터인 y1, y2를 생성하였습니다. 여기서 생성된 x, y1, y2 모두 101개의 값들로 구성된 1차원 실수형 배열들입니다. 이제 이후의 과정은 내장 파이썬의 표출 기능을 활용하는 방식으로 진행합니다. 먼저 Matplotlib 라이브러리의 Pyplot 모듈을 불러옵니다.

 

plt = Python.Import('matplotlib.pyplot')

 

그 다음은 플롯 그림을 표출할 차례인데, 먼저 X, Y 축으로 구성되는 하나의 플롯 공간 내에 두 데이터가 공존하는 형태의 표출부터 해보겠습니다. 그 과정은 다음과 같습니다. 여기서는 Pyplot 모듈의 plot 기능을 사용하면서 몇가지 필요한 속성들을 제어하는 방식으로 작업을 진행합니다.

 

fig = plt.figure(figsize=[8, 6], facecolor=[0.9, 0.9, 0.9])
p1 = plt.plot(x, y1, 'bo-', label='Data 1')
p2 = plt.plot(x, y2, 'ro-', label='Data 2')
void = plt.ylim(0, 12)
void = plt.xlabel('Time Elapsed', fontsize=12)
void = plt.ylabel('Data Value', fontsize=12)
void = plt.grid(linestyle=':')
void = plt.legend()
void = plt.savefig('plot_python_1.png')

 

여기서는 800x600 크기의 그래픽 창 내에서 x, y1 데이터로 플롯을 먼저 표출하고 여기에 x, y2 데이터에 해당되는 플롯이 추가되도록 하였습니다. 또한 두 플롯이 서로 다른 색상으로 표시되도록 하였고, 플롯 공간의 왼쪽 상단에 범례(Legend)도 함께 표시되도록 하였습니다. 이러한 과정에 의하여 생성된 그림의 모습은 다음과 같습니다.

 

 

이번에는 두 플롯이 상단 및 하단에 개별적으로 표출되는 형태로 표출해봅시다. 즉 그래픽 창을 띄우고 상단에는 (x, y1) 플롯이 표출되고 하단에는 (x, y2) 플롯이 표출되도록 하고자 합니다. 그 과정은 다음과 같습니다.

 

fig = plt.figure(figsize=[8, 8], facecolor=[0.9, 0.9, 0.9])
void = plt.subplot(211)
p1 = plt.plot(x, y1, 'bo-')
void = plt.ylim(0, 12)
void = plt.ylabel('Data 1', fontsize=12)
void = plt.grid(linestyle=':')
void = plt.subplot(212)
p2 = plt.plot(x, y2, 'ro-')
void = plt.ylim(0, 12)
void = plt.ylabel('Data 2', fontsize=12)
void = plt.xlabel('Time Elapsed', fontsize=12)
void = plt.grid(linestyle=':')
void = plt.suptitle('Two Plots Example', fontsize=16)

void = plt.savefig('plot_python_2.png')

 

여기서는 800x800 크기의 그래픽 창 내에서 x, y1 데이터 플롯을 상단에 먼저 표출하고 바로 이어서 x, y2 데이터 플롯을 하단에 표출하였습니다. 이러한 과정에 의하여 얻어진 그림의 모습은 다음과 같습니다.

 

 

이와 같이 IDL 기반으로 생성된 데이터를 파이썬의 표출 기능에 투입하여 결과 그림을 얻을 수 있습니다. 여기서 사용된 예제 데이터인 x, y1, y2는 IDL 코딩으로 생성된 실수형 배열입니다. 그런데 이 배열들을 파이썬의 plot 함수에 그대로 투입하였고 별다른 문제없이 처리가 된 것을 확인할 수 있습니다. 참고로 IDL에서 생성된 실수형 데이터는 세부적으로는 4바이트(32비트) 실수형인데 이러한 데이터를 파이썬에 투입하면 거기서도 4바이트 실수형 즉 세부적으로는 numpy.float32로 인식합니다. 이것은 IDL과 파이썬 사이의 데이터 변환 규칙에 의한 것입니다.

 

참고로 방금 언급한 IDL과 파이썬 사이의 데이터 변환 규칙에 관해서는 IDL 도움말에서 IDL Bridges -> Python Bridge -> Parameter Passing and Data Conversion 섹션을 참조하거나 또는 해당 웹링크를 참조하시면 됩니다. 그리고 향후에도 이와 같이 IDL에서 파이썬 기능을 사용하는 다른 예제들을 소개하게 되면 해당 내용에 맞춰서 이러한 데이터 변환 규칙에 관하여 또 언급하도록 하겠습니다.

 

 

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

LIST