GNUPLOT 사용법, 함수 그래프 그리기, 두 함수 사이의 영역 색칠하기
2020.07.09 21:09
GNUPLOT 사용법, 함수 그래프 그리기, 두 함수 사이의 영역 색칠하기
gnuplot은 수학 함수나 실험 데이터의 그래프를 그리기 위한 프로그램입니다. 상용 소프트웨어인 MS-EXCEL, Origin 등과 유사한 기능을 제공하면서도, 무료 공개 소프트웨어이며 리눅스, 맥, 윈도우 등 대부분의 플랫폼을 지원합니다. 가장 큰 차이는 MS-EXCEL과 Origin이 그래픽 유저 인터페이스를 기반으로 스프레드시트 (데이터 테이블) 상의 내용을 그래프로 표현하는 방식을 가지는 반면에, gnuplot은 텍스트 명령행 기반의 인터페이스를 가진다는 점 입니다. 대화형 인터페이스를 통해서, 한 줄 씩 명령어를 입력하여 그래프를 그리거나 옵션을 설정할 수 있고, 이러한 명령들을 스크립트 파일로 작성하고 이를 읽어들여 한 번에 실행시킬 수도 있습니다 . 물론, 스크립트 작성을 통한 배치 작업 (batch process, 일괄 처리)도 가능합니다.
gnuplot 설치 방법과 간단한 사용법은 인터넷에서 쉽게 찾을 수 있으므로, 여기에서는 좀 더 유용한 사용법들을 소개하고자 합니다.
함수의 그래프(2차원)를 그리는 방법은 간단합니다.
plot 명령을 사용합니다.
gnuplot> plot sin(x)
여기서 'gnuplot>'은 gnuplot의 프롬프트를 나타낸다.
두 개 이상의 함수들을 동시에 그릴 수도 있습니다.
plot 명령 뒤에 함수의 이름을 콤마(,)로 구분하여 나열하기만 하면 됩니다.
gnuplot> plot sin(x), cos(x)
아래와 같이 사용자 함수의 정의도 가능합니다.
gnuplot> f(x) = x + 1
gnuplot> g(x) = x**2 - 1
gnuplot> plot f(x), g(x)
함수의 범위도 지정할 수 있습니다.
gnuplot> plot [-3:3] [] f(x), g(x)
각 구간을 [] 기호로 둘러싸 정의할 수 있으며, 위 예제에서는 x 구간만 지정하고 y 구간은 자동 설정으로 대신하였다.
y=g(x), 포물선의 위쪽 영역을 색칠하였다.
gnuplot> plot [-3:3] [] g(x) with filledcurves
y=g(x), 포물선과 화면 아래 쪽 x축(x1으로 표기) 사이의 영역을 색칠합니다.
gnuplot> plot [-3:3] [] g(x) with filledcurves x1
x축에 평행하고 y절편이 1인 직선('y1=1'로 표현)과 포물선, y=g(x) 사이의 영역을 색칠합니다.
gnuplot> plot [-2:2] [] g(x) with filledcurves y1=1
이번에는 두 함수 f(x)와 g(x) 사이의 영역을 칠하고, legend 표기 방식도 보기 좋게 수정해 보겠습니다. 직접 지원하는 명령을 찾지 못해서 약간의 편법을 사용해야 했습니다. 먼저 포물선 함수 g(x)의 위쪽 영역을 (기본 설정 색으로) 칠하고, 직선 f(x)의 위쪽을 흰색(바탕색)으로 덧칠하여 두 함수 사이의 영역을 표현했습니다. 마지막으로 두 함수의 곡선을 다시 그립니다. 고등학교 수학 교과서에 자주 등장하는 그림이죠.(^-^;)
gnuplot> plot [-3:3] [] g(x) with filledcurves notitle, f(x) with filledcurves x2 fillcolor rgb 'white' notitle, f(x), g(x)
물론, 곡선을 채우는 패턴도 변경할 수 있습니다.
gnuplot> plot [-3:3] [] g(x) with filledcurves fill pattern 1 notitle, f(x) with filledcurves x2 fc rgb 'white' notitle, f(x), g(x)
비슷한 작업을 위해서 텍스트 편집기(vi, gedit, nano, ...)를 이용해서 아래와 같은 스크립트를 작성하고 활용할 수 있습니다.
# 주석 표시, gnuplot script
# 이전에 변경된 설정들을 모두 기본 (default) 상태로 초기화 한다.
reset
# 터미널 형식을 포스트스크립트로 변경합니다.
set terminal postscript
# 결과를 파일로 저장합니다.
set output 'FillBetweenTwoCurves.eps'
f(x)=x+1
g(x)=x**2-1
# x축과 y축의 스케일을 같게 합니다.
set size ratio -1
# legend 위치를 오른쪽 아래로 지정합니다.
set key right bottom
plot [-3:3] [ ] g(x) with filledcurves fillstyle pattern 1 notitle, \
f(x) with filledcurves x2 fillcolor rgb 'white' notitle, \
f(x) with lines linetype 1 linecolor 1 linewidth 3, \
g(x) with lines lt 2 lc 2 lw 3;
예제에서는 점선을 나타내기 위해서 포스트스크립트 터미널 형식을 사용했습니다. jpeg 또는 png 형식의 터미널에서는 solid 형태의 선 밖에 사용할 수 없습니다. 스크립트 파일의 이름을 'FillBetweenTwoCurves.gp'라고 한다면, gnuplot 프롬프트 상태에서 아래와 같이 'load' 명령으로 이를 실행시킬 수 있습니다.
gnuplot> load 'FillBetweenTwoCurves.gp'
또는 터미널에서 직접 실행시킬 수도 있습니다.
$ gnuplot FillBetweenTwoCurves.gp
리눅스 환경에서는 ps 또는 eps 형식의 그림 파일을 기본으로 표시하지만, 윈도우 환경에서는 이를 보기 위해서 GSView와 같은 별도의 프로그램을 설치해야 합니다.
명령어들에 대한 자세한 설명은 gnuplot 공식 홈페이지(http://www.gnuplot.info)의 매뉴얼, 튜토리얼, 이미지 갤러리를 참고하세요. 참고문헌으로는 'Gnuplot In Action'이나 'Gnuplot Cookbook'이 볼만합니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.