エラーバー付きグラフを作りたい(TGraphErrors

1#include <TGraphErrors.h>
2
3// エラーバー付きグラフを作成
4TGraphErrors *g = new TGraphErrors();
5g->SetPoint(0, 1.0, 2.0);
6g->SetPointError(0, 0.1, 0.2);
7g->SetPoint(1, 2.0, 4.0);
8g->SetPointError(1, 0.15, 0.3);
9g->Draw("AP");

TGraphErrorsは、各データ点に誤差(エラーバー)を付与できるグラフクラスです。 測定値の不確かさやばらつきを可視化する際に活用します。 TGraphと同じように点をプロットしますが、X軸とY軸の両方に誤差を指定できます。

1from ROOT import TGraphErrors
2
3# エラーバー付きグラフを作成
4g = TGraphErrors()
5g.SetPoint(0, 1.0, 2.0)
6g.SetPointError(0, 0.1, 0.2)
7g.SetPoint(1, 2.0, 4.0)
8g.SetPointError(1, 0.15, 0.3)
9g.Draw("AP")

コンストラクターのシグネチャ

1// 空のグラフを作成
2TGraphErrors();
3
4// データ配列からグラフを作成
5TGraphErrors(Int_t n,
6             Double_t *x,
7             Double_t *y,
8             Double_t *ex,
9             Double_t *ey);

デフォルトコンストラクター(引数なし)

  • 点を持たないグラフを作成

  • SetPoint()SetPointError()を使って点とエラーを追加

配列コンストラクター

  • n:点の個数

  • x:X座標の配列

  • y:Y座標の配列

  • ex:X軸の誤差の配列

  • ey:Y軸の誤差の配列

点とエラーを追加したい

 1#include <TGraphErrors.h>
 2
 3TGraphErrors *g = new TGraphErrors();
 4
 5// 方法1:SetPoint()とSetPointError()を個別に呼び出す
 6g->SetPoint(0, 1.0, 2.0);
 7g->SetPointError(0, 0.1, 0.2);
 8
 9// 方法2:GetN()を使って最後に追加する場合
10Int_t n = g->GetN();
11g->SetPoint(n, 2.0, 4.0);
12g->SetPointError(n, 0.15, 0.3);
13
14g->Draw("AP");

SetPoint()で点を追加し、SetPointError()で対応するインデックスにエラー情報を追加します。

重要な点は、SetPoint()SetPointError()の第1引数(インデックス)を一致させることです。

配列からグラフを作成したい

 1#include <TGraphErrors.h>
 2
 3const Int_t n = 3;
 4Double_t x[n] = {1.0, 2.0, 3.0};
 5Double_t y[n] = {2.0, 4.0, 6.0};
 6Double_t ex[n] = {0.1, 0.15, 0.2};
 7Double_t ey[n] = {0.2, 0.3, 0.4};
 8
 9// 配列からグラフを作成
10TGraphErrors *g = new TGraphErrors(n, x, y, ex, ey);
11
12g->Draw("AP");

配列から直接グラフを作成することで、効率的にデータをプロットできます。

SetPointErrorの注意点

 1#include <TGraphErrors.h>
 2
 3TGraphErrors *g = new TGraphErrors();
 4
 5// ❌ 間違い:GetN()が呼ぶたびに増加するため、エラーが正しい位置に付かない
 6g->SetPoint(g->GetN(), 1.0, 2.0);
 7g->SetPointError(g->GetN(), 0.1, 0.2);  // GetN()が1を返すが、点は0のままになる
 8
 9// ✅ 正しい:インデックスを保存してから使用
10Int_t npt = g->GetN();
11g->SetPoint(npt, 1.0, 2.0);
12g->SetPointError(npt, 0.1, 0.2);  // 同じインデックスを使用

SetPoint()SetPointError()を続けて呼び出す際、GetN()は呼び出しのたびに値が変わるため、必ずインデックスを変数に保存してから使用してください。

描画オプション

Draw()メソッドで異なる描画方法を指定できます。

オプション

説明

"A"

軸を描画(必ず含める)

"P"

点を描画

"E"

エラーバーを描画

"L"

直線で連結

"C"

曲線で連結

 1#include <TGraphErrors.h>
 2
 3TGraphErrors *g = new TGraphErrors();
 4g->SetPoint(0, 1.0, 2.0);
 5g->SetPointError(0, 0.1, 0.2);
 6g->SetPoint(1, 2.0, 4.0);
 7g->SetPointError(1, 0.15, 0.3);
 8
 9g->Draw("AP");      // 軸+点
10g->Draw("APE");     // 軸+点+エラーバー(推奨)
11g->Draw("APEL");    // 軸+点+エラーバー+直線

関連メソッド

参考資料