gnuplot 4.2
http://www.gnuplot.info
gnuplot으로 하도 많은것을 해 보는 바람에 앞으로 써먹을 수도 있는 내용들이라 적어둔다.
리눅스, 윈도우, 맥에서 다 돌아가지만 윈도우용은 윈도우 자체가 커맨드라인 인터페이스가 많이 허접한 관계로 쓰라고 권하고 싶지 않다. 여기서는 리눅스 용을 예로 든다.
yum이 깔려 있으면 루트에서 yum install gnuplot 이라고 치기만 하면 설치할 수 있다. yum이 없으면, 위의 gnuplot 홈페이지 어딘가에 있는 gnuplot 저장소에서 rpm이나 deb을 찾아서 설치해 주면 된다. 소스 컴파일이나 그런 복잡한 건 나도 모르므로 건너 뛰도록 하겠다.

일단, 기초적인 세팅부터 해야 한다. 실행을 시켜보자. 그냥 gnuplot이라고 치기만 하면 된다.
        G N U P L O T
        Version 4.2 patchlevel 0
        last modified March 2007
        System: Linux 2.6.20-1.2952.fc6
 
        Copyright (C) 1986 - 1993, 1998, 2004, 2007
        Thomas Williams, Colin Kelley and many others
 
        Type `help` to access the on-line reference manual.
        The gnuplot FAQ is available from
                http://www.gnuplot.info/faq/
 
        Send comments and help requests to  <gnuplot-info@lists.sourceforge.net>
        Send bug reports and suggestions to <gnuplot-bugs@lists.sourceforge.net>
 
 
Terminal type set to 'unknown'
gnuplot>

저기 보이는 "gnuplot>"은 프롬프트인데, 그 바로 위에 terminal이 unknown으로 설정되었다는 말이 있다. 터미널은 gnuplot이 그린 그림을 어디서 볼 것인지 결정하는 건데, 그게 unknown이라는 것은 보여줄 것이 없다는 뜻이다. 4.0에서는 기본적으로 x11을 지원하는데, 4.2에서는 local x-server에서만 x11을 지원하는 것 같다.

아무튼, 모른다고 하니까 터미널을가르쳐 주자.
set terminal postscript enhanced color

postscript는 ps파일로 출력할 때 사용하는데, ps파일은 나중에 pdf파일로 변환하거나 논문에 넣을 때 유용하다. 어떤 터미널을 쓸 수 있는지 알고 싶으면 set terminal만 치면 쭉 나온다.
enhanced는 그리스문자 등 확장된 형태의 label을 붙이고 싶을 때 사용한다. 저걸 적지 않으면 뒤에 나오는 {/Symbol }명령어가 처리되지 않고 명령어 그대로 출력된다.
color를 안붙이면 저절로 그레이 스케일로 출력되므로 흑백으로만 인쇄할거면 안붙여도 된다. 물론 color를 붙여도 흑백 프린터에서는 흑백으로 나온다.

set output "test.ps"

x11을 쓰는 경우는 기본적으로 모니터 화면으로 출력되므로 출력 화일을 정해줄 필요가 없지만 ps로 출력하게 되면 파일에 저장하겠다는 뜻이므로 위와 같이 파일 이름을 적어줘야 한다.
참고로, 모든 경우에 set 명령을 취소하고 싶으면 set 대신에 unset을 그 자리에 적어서 명령하면 된다.

set grid

그림에 격자를 넣을 수 있다. 격자 간격은 gnuplot이 알아서 멋있게 조절해 준다. 물론 가로줄, 세로줄을 넣거나 없앨 수 있고 간격도 조절할 수 있으며 굵기와 색깔과 점선 종류도 정해줄 수 있다. 그리고 격자를 다른 그림들보다 앞에 보이게 할지(격자가 그림을 가리는 것) 뒤에 보이게 할지(그림이 격자를 가리는 것) 정할 수도 있다. 이 모든 것은 http://www.gnuplot.info/docs/node188.html 을 참고하시기 바란다.

set xlabel "{/Symbol d}"
set ylabel "{/Symbol q_{13}}"

위의 두 명령어는 x축과 y축이 무슨 숫자를 표시하는지 알려줄 때 사용하는 레이블을 설정한다. {/Symbol d}라고 쓴 것은 그리스문자 $\delta$를 출력시키기 위해서이다. 물론 {/Symbol q_{13}}이라고 쓰면 $\theta_{13}$ 처럼 밑첨자도 출력할 수 있다.

set label "{/Symbol Q}_L^2 - {/Symbol Q}_Q^2 = ({/Symbol p}/4)^2" front at 0.5, 0.16

이렇게 하면 그림에 설정된 좌표상 (0.5, 0.16) 위치에 따옴표 안에 있는 글자들을 넣을 수 있다. 물론 좌표는 at 다음에 넣은 숫자이다.
front는 label이 다른 그림들보다 앞에 있는(즉, 글자가 그림을 가리는) 것으로 출력된다. 적지 않으면 label은 그림에 가려지게 되어 안보일 수도 있다.
set xrange [0:3.14159]
set yrange [0.0:0.23]

x축과 y축 좌표계의 범위를 설정해준다. [와 ]로 묶은 괄호 안에 :를 하나 넣어서 구별하는데, 만약 어느 한쪽을 적지 않으면 그쪽은 gnuplot이 알아서 대충 설정해준다.

set object 1 rectangle from 0.0,0.0 to 1.5707, 1.5707 behind fc rgb "gray" fs solid 0.4 noborder

이게 4.2에서 추가된 대박 기능이다. 임의의 직사각형을 from부터 to의 두 꼭지점을 지정하여 그릴 수 있다.
behind는 앞서의 front와는 반대로 이것을 뒤로 집어넣을 수 있는 것이다.
fc는 fontcolor라고 대신 써도 되고, 줄여서 fc라고 써도 된다. 원래는 저기에 정수를 넣는데, 저런식으로 rgb라고 써놓고 "..."안에 이름을 써도 된다. 어떤 색 이름들이 지정되어 있는지는 show palette colornames 라고 명령을 치면 알 수 있다.
fs는 filledstyle인데, 채우는 방식을 알려준다.
solid는 앞서 얘기한 색으로 잘 칠하는 건데, 0부터 1사이의 값을 이용해서 얼마나 새카맣게 칠할지 가르쳐 줄 수 있다. 저거 말고 pattern으로 채울 수도 있고, 그냥 fs를 안 적거나 empty라고 하면 빈칸으로 놔두게 된다.
noborder는 직사각형의 가장자리를 그리지 말라는 옵션이다. 물론 가장자리를 그릴 수도 있으며, 가장자리를 그리는 경우에는 가장자리 선의 색, 점선 종류, 굵기 등을 조절할 수 있다.

set y2tics ("1{/Symbol s}" 0.091, "3{/Symbol s}" 0.2)

tics는 눈금을 뜻한다. xtics, ytics, x2tics, y2tics등을 설정할 수 있다. 2가 없는 tics는 각각 아래쪽과 왼쪽의 x, y좌표축을 뜻하고 2가 붙은 것들은 오른쪽과 위쪽의 좌표축이다. 그냥 아무것도 없으면 gnuplot이 알아서 눈금을 붙여주고, 괄호 안에 쉼표로 구별해서 "..."는 눈금 이름, 그리고 그 옆에 숫자는 눈금의 좌표를 뜻한다.

set parametric

gnuplot은 기본적으로 f(x)형태의 함수를 출력한다. parametric을 설정하면 변수 x대신 변수 y를 써서 x(t), y(t)형태로 그림을 그리게 된다. 3차원 그림을 그릴 때는 u,v를 매개변수로 사용하게 된다.

plot "data" using 4:3 with filledcurves x2 lt rgbcolor "gray70" title "", t, 0.091 with lines title "", t, 0.2 with lines title ""

plot은 드디어 그림을 그리라는 명령이다. 여러개를 그릴 때는 각각을 쉼표로 구별해서 여러개를 한 도표에 나타낼 수 있다. 여기서는 "data"라는 화일에 찍힌 숫자들을 그리라는 뜻이다. "data"라는 화일의 형식은 숫자 여러개를 배열한 형태다.
-2.673592    -0.038592    0.000000    0.000000    0.628319    0.892512
-2.673592    -0.037592    0.000000    0.000000    0.628319    0.892510
-2.673592    -0.036592    0.000000    0.000000    0.628319    0.892508
-2.673592    -0.035592    0.000000    0.000000    0.628319    0.892506
-2.673592    -0.034592    0.000000    0.000000    0.628319    0.892504
-2.673592    -0.033592    0.000000    0.000000    0.628319    0.892502
-2.673592    -0.032592    0.000000    0.000000    0.628319    0.892501
-2.673592    -0.031592    0.000000    0.000000    0.628319    0.892499
-2.673592    -0.030592    0.000000    0.000000    0.628319    0.892497

내가 쓴 파일들은 이런 형식이었다.
숫자들을 구별하는데는 탭, 빈칸, 쉼표 등이 사용될 수 있다. using은 n:m형식으로 사용되는데, x좌표와 y좌표에 사용할 숫자를 몇번째 열(세로줄)에서 고르냐는 것을 결정한다. 4:3이라고 썼으므로 4번째 열을 x좌표로 잡고 3번째 열을 y좌표로 잡아서 그림을 그리게 된다. 아무것도 지정하지 않으면 1:2를 준 것과 같다.
with는 그림을 뭘로 그릴지 정하는 건데, points, dots, lines, pointslines, boxes 등등등을 쓸 수 있다. points는 좀 큰 점이고 dots는 1픽셀짜리 점이다. filledcurves는 그림을 그린 내부를 색칠하라는 옵션이다. filledcurves다음의 x2는 내가 그린 그래프와 x2축(오른쪽 좌표축) 사이의 공간을 색칠하라는 뜻이다. lt는 linetype의 줄임으로 선 색깔인데, 회색을 위해서 rgbcolor로 gray70을 줬다. title은 그 그래프의 제목을 표시하는 부분인데 따옴표 안에 아무것도 넣지 않으면 출력을 안해준다. 그리고 쉼표는 다른 그래프를 겹쳐 그리기 위한 것이다.
t, 0.091은 아까 parameter로 설정했으므로 x좌표는 그냥 전 범위이고 y좌표가 0.091인 직선을 하나 그리게 된다. 물론 이 그래프는 x축에 평행한 직선이 된다.
!ps2pdf test.ps

느낌표는 gnuplot내부 명령어가 아니라 그 바깥의 명령어, 즉 쉘의 명령어를 실행하고 싶을 때 사용한다. 저렇게 적으면 ps파일을 pdf파일로 바꿔주게 된다.

이 모든것을 gnuplot은 하나하나 할 필요 없이 스크립트로 만들어서 단숨에 처리할 수 있는데, 실행시키고 싶은 모든 명령어를 다 넣은 텍스트 파일을 하나 저장하자. 가령, 그 이름을 theta.gplt라고 한다면 쉘에서 이렇게 치면 된다.
gnuplot theta.gplt

그럼 theta.gplt에 있는 모든 명령어가 실행되고 끝난다. 따라서 이 명령어는 쉘 스크립트에서 응용할 수 있다. 아무튼, 위의 명령어를 사용한 내 그림 예제가 아래와 같다.
사용자 삽입 이미지

gnuplot example


by snowall 2007. 7. 29. 22:45