#!/usr/bin/env python2위 코드는 전형적인 x-y 플로팅을 한다. dat파일에서 (csv를 읽게 고칠 수도 있음... np.loadtxt( f, delimiter='\t' ) 여기 delimiter를 ',' 로 바꾸면.) 데이터를 읽어서 그래프를 그려줌. 끝에 있는 if 0: 에서 0을 1로 바꾸면 화면에 보여주는 대신 PDF저장은 하지 않을 것이다.
import numpy as np
import matplotlib.pyplot as plt
# pdf saving.
from matplotlib.backends.backend_pdf import PdfPages
# Allow LaTeX rendering.
from matplotlib import rcParams
rcParams['text.usetex']=True
rcParams['text.latex.unicode']=True
# needed for formatting Y axis
from matplotlib.ticker import FuncFormatter
# Matplotlib font manager
import matplotlib.font_manager as font_manager
# load data
f = open( 'mot-opt-leaf.dat' )
leaf = np.loadtxt( f, delimiter='\t' )
f.close()
f = open( 'mot-opt-all.dat' )
alles = np.loadtxt( f, delimiter='\t' )
f.close()
# separate CSV data
t_l, i_l = zip(*leaf)
t_a, i_a = zip(*alles)
# axis labling
plt.xlabel( "Time (ps)" )
plt.ylabel( "Peak Current (\mu A)" )
# axis
plt.xlim( 0.5, 4.5 )
plt.ylim( -50, 700 )
# do plotting
p_leaf, = plt.plot( t_l, i_l, color='k' )
p_all, = plt.plot( t_a, i_a, color='b', linestyle='--' )
# draw legend
# at lower center
plt.legend( [p_leaf,p_all], ["Leaf Nodes","All Nodes"], loc=1 )
# remove margins
plt.subplots_adjust( left=0.1, right=0.9, bottom=0.1, top=0.9 )
if 0:
# show
plt.show()
else:
# or save
pp = PdfPages('mot-opt.pdf')
pp.savefig()
pp.close()
플로팅을 실제로 하려면, 그저 여느 python2 스크립트처럼 실행하는 것만으로 충분하다.
결과물:
상당히 예쁜 편. LaTeX 코드도 넣을 수 있다는 점이 마음에 들어서 Matplotlib으로 낙찰. 그리고 Python 언어로 되어 있어서 지저분한 gnuplot 코드보단 나은지도.
예제 Makefile
PDFS=mot-opt.pdf mot-subopt.pdf새로 업데이트 된 py 스크립트만 적절히 스캔해서 실행해주어, 결과물인 PDF파일이 생성될 수 있도록 해준다.
PYS=mot-opt.py mot-subopt.py
.SUFFIXES: .pdf .py
all: $(PDFS)
.py.pdf:
python2 $<
PyLab 인터페이스를 쓰면 더 쉬운 플로팅이 가능하니 참고할 것.