2次元ヒストグラムしたい(TH2

1#include <TH2D.h>
2
3// 2次元ヒストグラムを作成
4TH2D *h = new TH2D("h2d", "2D Histogram;X axis;Y axis", 100, -1, 1, 100, -5, 5);

TH2は2次元ヒストグラムの基本クラスです。 2つの変数の相関関係を可視化する際に、データの分布を両軸で同時に解析するために使用します。 TH1と同じように、データ型に応じた派生クラスを選択することで、メモリ使用量と精度のバランスを最適化できます。

1from ROOT import TH2D
2
3# 2次元ヒストグラムを作成
4h = TH2D("h2d", "2D Histogram;X axis;Y axis", 100, -1, 1, 100, -5, 5)

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

1TH2D(const char* name,
2     const char* title,
3     Int_t nbinsx,
4     Double_t xlow,
5     Double_t xup,
6     Int_t nbinsy,
7     Double_t ylow,
8     Double_t yup);

引数の説明

name - ヒストグラムの名前

  • オブジェクト識別用

  • ROOTファイルでの保存

  • 同じディレクトリ内では一意

title - ヒストグラムのタイトル

  • TCanvasに描画するときに表示

  • "タイトル;X軸;Y軸"のようにセミコロン区切りの形式で軸ラベルも指定可能

nbinsx - X軸のビン数

  • ビン幅は (xup - xlow) / nbinsx で計算

xlow、xup - X軸の範囲

  • xlowより小さい値はUnderflowとしてカウント

  • xupより大きい値はOverflowとしてカウント

nbinsy - Y軸のビン数

  • ビン幅は (yup - ylow) / nbinsy で計算

ylow、yup - Y軸の範囲

  • ylowより小さい値はUnderflowとしてカウント

  • yupより大きい値はOverflowとしてカウント

データ型を選択したい

TH2には複数の派生クラスがあります。 入力するデータの特性に合わせて選択できます。

クラス名

データ型

データ長

用途

TH2C

char

8bit 整数

非常に小さいカウント値(0-256)

TH2S

short

16bit 整数

小〜中程度のカウント値(0-65536)

TH2I

int

32bit 整数

整数値データ

TH2F

float

32bit 浮動小数点

連続値データ(標準)

TH2D

double

64bit 浮動小数点

高精度が必要な連続値データ

選択のガイドライン:

  • 整数値データ: TH2Iを使用

  • 連続値データ: TH2F(メモリ効率)またはTH2D(高精度)を使用

  • データサイズが大きい場合: TH2Fでメモリ節約

  • 高精度が必要な場合: TH2Dを使用

タイトルと軸ラベルしたい

 1#include <TH2D.h>
 2
 3// タイトルと軸ラベル
 4TH2D *h = new TH2D(
 5    "h",
 6    "Title;X axis;Y axis",
 7    100, 0, 10,
 8    100, 0, 20
 9);
10
11// セミコロン区切り:タイトル;X軸タイトル;Y軸タイトル
12TH2D *h2 = new TH2D(
13    "h2",
14    "Energy Distribution;Kinetic Energy (GeV);Angle (deg)",
15    100, 0, 100,
16    50, 0, 180
17);

ヒストグラムを初期化するときに、タイトルと軸ラベルを指定できます。 セミコロン(;)で区切ることで、グラフのタイトル、X軸タイトル、Y軸タイトルを同時に指定できます。

実践例:相関関係を解析したい

 1#include <TH2D.h>
 2#include <TRandom.h>
 3#include <cstdio>
 4
 5// 2次元ヒストグラムを作成
 6TH2D *h = new TH2D("correlation",
 7                   "X vs Y Correlation;X Value;Y Value",
 8                   100, -3, 3,
 9                   100, -3, 3);
10
11// 相関のあるデータを生成
12for (Int_t i = 0; i < 10000; i++) {
13    double x = gRandom->Gaus(0, 1);
14    double y = 2 * x + gRandom->Gaus(0, 0.5);
15    h->Fill(x, y);
16}
17
18// カラーマップで描画
19h->Draw("COLZ");

このサンプルでは、y=2xの関係を持つ相関データを生成し、その相関関係を2次元ヒストグラムで可視化しています。

描画オプション

2次元ヒストグラムの描画時には、異なる表示方法を指定できます。

オプション

説明

"COLZ"

カラーマップで表示(デフォルト、推奨)

"CONT"

等高線で表示

"LEGO"

3D立体図で表示

"SURF"

3D曲面で表示

"BOX"

ボックスで表示

"SCATTER"

散布図で表示

 1#include <TH2D.h>
 2
 3TH2D *h = new TH2D("h", "2D Histogram", 50, -5, 5, 50, -5, 5);
 4
 5// ... データを入力 ...
 6
 7// 異なる表示方法
 8h->Draw("COLZ");      // カラーマップ
 9h->Draw("CONT");      // 等高線
10h->Draw("LEGO");      // 3D立体図

関連メソッド

  • TH1 - 1次元ヒストグラム

  • TH3 - 3次元ヒストグラム

  • TProfile - プロファイルヒストグラム

参考資料