plot.py


꽤 많은 데이터들을 gnuplot으로 plot을 하고 싶을 때가 있다. 사실 python에서 matplotlib와 numpy로 싹 그릴수도 있지만 matplotlib에서 지원해주는 옵션을 자유자재로 다루기가 어려운 경우가 다반사다. 그렇다고 plot을 안할수는 없는 노릇이고... 


그냥 gnuplot의 스크립트 파일(e.g. plot.plt)을 만들어 실행시키는 방법을 써보자.


python이 빠르고 쉽게 문자열을 다룰수 있다는 강점이 있어 이를 사용했다.

(결국 python 관련 글....)


import glob


Flist = glob.glob('*.dat')


fwriteName = "plot.plt"

fw = open(fwriteName, 'a')


fw.write("set term png\n")    # 여기에 자신이 처음 입력할 terminal 옵션을 넣어주자


OldExt = 'dat'

NewExt = 'png'



for i in range(len(Flist)):

#Read file to know how many tab      # 데이터에서 tab이 여러번 먹혀있으면 엉망이되므로 주의!

fr = open(Flist[i], 'r')

StrContent = fr.readline()

TabCount = StrContent.count('\t')



fpngName = Flist[i].replace(OldExt, NewExt)


StrOutput = 'set output \'' + fpngName + '\'\n' 


fw.write(StrOutput)

LastCol = TabCount + 1


StrPlot = 'p \'./' + Flist[i] + '\' u ' + str(LastCol) + ':($3/$2) w p, \'\' u ' + str(LastCol) + ':($4/$2) w p\n'     #이런식으로 plot 옵션을 적어주면 된다. 근데 ' 등의 특수문자를 써야해서 꽤 주의해야 한다.

fw.write(StrPlot)


이를 실행시키면 한 디렉토리 안에 있는 dat파일을 모두 읽어 자신이 지정한 방법대로 그림을 그려 png로 저장해준다. 이 프로그램을 그대로 쓰기엔 조심할 점이 있는데, 


1    2    3        4    5

..   ..    ..       ..    ..


원래 데이터파일이 위와같이 tab이 여러번 존재한다고 해보자. gnuplot은 그래도 착하게 우리가 눈으로 보는 것과 같이 행을 구분해준다. using 1:4 와 같은 식으로 옵션을 써주어도 우리가 의도한대로 잘 실행된다.

하지만 위의 프로그램에서는 Column의 개수를 tab의 수로 가정했기 때문에 중복된 tab(위의 예제에선 3과 4 사이)를 없애주어야 한다. 없애는 방법은 아래 링크를 참조!

http://amornatura.tistory.com/62

'Study > Computer' 카테고리의 다른 글

pylab과 pyplot의 차이?  (0) 2012.10.22
matplotlib에서 자주쓰는 옵션들 정리(진행중)  (0) 2012.10.22
python으로 중복된 tab없애기  (0) 2012.10.03
ssh 접속이 안될때  (0) 2012.09.21
Ubuntu superuser 추가하기  (0) 2012.09.20

+ Recent posts