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 件のコメント:
コメントを投稿