TGraph というクラスを使用する
次のコードでは、引数にプロットするデータファイルを指定する。
データファイルの形式は
data_x data_y
#/bin/usr/env python
import sys, os
import ROOT
if __name__=='__main__':
if len(sys.argv) < 2 :
sys.exit(1)
if not os.path.exists(sys.argv[1]) :
sys.exit(1)
# read data from file
fin = open(sys.argv[1], "r")
fins = fin.readlines()
fin.close()
graph = ROOT.TGraph()
# set data point
for data in fins :
item = data.split(None)
np = graph.GetN()
graph.SetPoint(np, float(item[0]), float(item[1]))
cv = ROOT.TCanvas("cv", "Graph Example", 200, 10, 700, 500)
pad = cv.cd()
pad.SetGridx(1)
pad.SetGridy(1)
graph.Draw("APL")
cv.Update()
# export
cv.Print("graph1.png")
エラーバー付きのプロット
エラーバーを付けてプロットするには、 TGraphErrors クラスを使用する
ここでの引数にしていするデータファイルの形式は
data_x data_y data_x_err data_y_err
#/bin/usr/env python
import sys, os, array
import ROOT
if __name__=='__main__':
if len(sys.argv) < 2 :
sys.exit(1)
if not os.path.exists(sys.argv[1]) :
sys.exit(1)
# read data from file
fin = open(sys.argv[1], "r")
fins = fin.readlines()
fin.close()
dat = {'X' : array.array('f'),
'X_ERR' : array.array('f'),
'Y' : array.array('f'),
'Y_ERR' : array.array('f')}
# set data point
for data in fins :
item = data.split(None)
dat['X'].append(float(item[0]))
dat['X_ERR'].append(float(item[2]))
dat['Y'].append(float(item[1]))
dat['Y_ERR'].append(float(item[3]))
graph = ROOT.TGraphErrors(len(dat), dat['X'], dat['Y'],
dat['X_ERR'], dat['Y_ERR'])
cv = ROOT.TCanvas("cv", "Graph Example", 200, 10, 700, 500)
pad = cv.cd()
pad.SetGridx(1)
pad.SetGridy(1)
graph.Draw("APL")
cv.Update()
# export
cv.Print("graph2.png")
Tips プロット時のオプション
Draw("**") のときの ** を変えることで、いろいろなグラフが描ける
A : 軸をグラフの周りに描く
P : データを指定したマーカー (default は ・) でプロットする
L : 折れ線グラフ
C : データの間を滑らかな曲線で結ぶ
1次関数で fitting
#/bin/usr/env python
import sys, os, array
import ROOT
if __name__=='__main__':
if len(sys.argv) < 2 :
sys.exit(1)
if not os.path.exists(sys.argv[1]) :
sys.exit(1)
# read data from file
fin = open(sys.argv[1], "r")
fins = fin.readlines()
fin.close()
dat = {'X' : array.array('f'),
'X_ERR' : array.array('f'),
'Y' : array.array('f'),
'Y_ERR' : array.array('f')}
# set data point
for data in fins :
item = data.split(None)
dat['X'].append(float(item[0]))
dat['X_ERR'].append(float(item[2]))
dat['Y'].append(float(item[1]))
dat['Y_ERR'].append(float(item[3]))
graph = ROOT.TGraphErrors(len(dat), dat['X'], dat['Y'],
dat['X_ERR'], dat['Y_ERR'])
# fitting
graph.Fit("pol1")
# output fitting parameters
ROOT.gStyle.SetOptFit()
cv = ROOT.TCanvas("cv", "Graph Example", 200, 10, 700, 500)
pad = cv.cd()
pad.SetGridx(1)
pad.SetGridy(1)
graph.Draw("AP")
cv.Update()
# export
cv.Print("graph3.png")
0 件のコメント:
コメントを投稿