TGraph編
グラフに順に点を足していきたい
方眼紙にプロットするように、1点ずつ点を打つようなグラフ(散布図)を作りたい人向け
FADCの波形データをプロットした場合を例に示す
1const Int_t N = t->GetEntries();
2TGraph *gr[N]; // 各イベントのFADC波形をグラフにしたいとする
3
4for (Int_t igraph = 0; graph < N; igraph++) {
5 gr[igraph] = new TGraph(0); // 0個の点のグラフとしてTGraphオブジェクトを作成
6}
7
8for (Int_t ientry = 0; ientry < N; ientry++) {
9 t->GetEntry(ientry); // ここで、FADCの各サンプリング点データの詰まったvectorが得られるとする(変数名をadcとする)
10 Int_t Nsamp = (Int_t)adc.size(); // vector変数の大きさを調べる
11 for (Int_t isamp = 0; isamp < Nsamp; isamp++) {
12 gr[ientry]->SetPoint(gr[ientry]->GetN(), isamp, adc->at(isamp));
13 // GetN()で、今の点の数を取ってきているのがミソ
14 // あとは、xの値、yの値を指定する
15 }
16}
エラーを付ける際の注意点
上のループはTGraphErrorsでも使用可能
なので、エラーを付けることもできるが、以下の点に注意する
1// これは間違い
2gre->SetPoint(gre->GetN(), x, y); // とりえあずGetN()してプロットする
3gre->SetPointError(gre->GetN(), xerr, yerr); // しかし、これだと、GetN()が次のになってしまって、正しい位置にエラーがつかない
4
5// 正しくは以下のようにする
6Int_t npt = gre->GetN();
7gre->SetPoint(npt, x, y);
8gre->SetPoint(npt, xerr, yerr); // 第一引数の値を一緒にする
エラーバー付きのグラフを作成した
TGraphErrorsクラスを使う
1const int npoints = 10;
2double x[npoints] = {1, 2, 4, 8, 16, 3, 9, 18, 5, 25};
3
4TGraphErrors *gre;
5gre = new TGraphErrors(npoints);
6
7for (int i = 0; i < npoints; i++){
8 gre->SetPoint(i, x[i], 3*x[i]-x[i]);
9 gre->SetPointError(i, 0.5, TMath::Sqrt(x[i]));
10}
11
12gre->Draw("ap");
TMultiGraph
1TMultiGraph *mg = new TMultiGraph("mg", "mg")
2TGraph *g[4];
3for (Int_t i = 0; i < 4; i++) {
4 g[i] = new TGraph(0);
5 mg->Add(g[i], "pl");
6}
7mg->Draw()
TMultiGraphでGetXaxis()するときには、以下のtipsが必要
[[http://root.cern.ch/phpBB3/viewtopic.php?f=3&t=4041]]