꾸로네

gnuplot 에서 반복문 쓰기 본문

연구자료/gnuplot

gnuplot 에서 반복문 쓰기

(gguro) 2010. 1. 26. 21:00

gnuplot 에서 반복문 쓰기

자료를 정리하고 그래프를 그리다보면 여러 자료를 가지고 동시에 그래프를 그리고 싶은 경우가 생긴다.
예를 들면
1.dat
2.dat
3.dat
...
9.dat
라는 자료 파일이 있다고 할 때, 이 그래프를 일일이 그린다는 것은 정말 따분하고 지루한 일이다. 그래서 흔히 다른 프로그램에서 알고 있는 forwhile을 이용한 반복문을 사용하고 싶어진다. 그런데 안타깝게도 gnuplot에는 그런 기능이 없다. 저런.. ㅠㅠ

그래서 찾아보니 방법을 알려주는데, 그 방법이라는 것이 Shell Script를 써서 반복되는 Gnuplot Script를 생성하라는 것이다. 뭐 그리 마음에 드는 방법은 아니지만 딱히 방법도 없으니 어찌 하겠는가. 그래서 간단한 반복문을 만드는 스크립트를 짜서 올려본다. 그럼 먼저 Shell Script를 짜 보자.

echo "set xrange[0:1]"
for ((ii=1; ii<=9; ii++))
do
echo "set terminal wxt $ii"
echo "plot sin($ii*x)"
done
echo "pause -1"

이것은 딱 보면 알겠지만 Sine 함수의 그래프를 그 계수를 바꿔가면서 그리는 것이다.  위의 내용을 적당한 이름의 파일로 저장한다. a.bat 라고 저장했다고 해보자. 그럼 이 파일을 chmod a+x a.bat 를 통해서 실행 가능한 파일로 바꾸고, 다음과 같은 명령행을 써서 실행한다.
$ ./a.bat > sine.dem

그럼 sine.dem 에는 다음과 같은 스크립트가 들어있을 것이다.
set xrange[0:1]
set terminal wxt 1
plot sin(1*x)
.......
set terminal wxt 9
plot sin(9*x)
pause -1

이 스크립트를 실행하기 위해서는 다음처럼 써 주면 된다.
$ gnuplot sine.dem
그럼 창이 9개가 순서대로 뜨면서 서로 다른 계수를 가지는 sine 함수의 그래프를 그려 줄 것이다. 아래에 있는 그래프처럼 말이다.


이 방법은 반복의 갯수에 따라 *.dem 파일의 내용이 엄청나게 길어지는 단점이 있지만 그래도 어쩌겠는가. 손으로 일일이 쓰는 것 보다는 낫지 않은가. 요즘 하드 용량이 커져서 1000줄 짜리 스크립트 정도는 가볍게 받아주는 시대이니 큰 부담 없이 해도 되지 않을까 한다.



Comments