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]]