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には複数の派生クラスがあります。
入力するデータの特性に合わせて選択できます。
クラス名 |
データ型 |
データ長 |
用途 |
|---|---|---|---|
|
|
8bit 整数 |
非常に小さいカウント値(0-256) |
|
|
16bit 整数 |
小〜中程度のカウント値(0-65536) |
|
|
32bit 整数 |
整数値データ |
|
|
32bit 浮動小数点 |
連続値データ(標準) |
|
|
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次元ヒストグラムの描画時には、異なる表示方法を指定できます。
オプション |
説明 |
|---|---|
|
カラーマップで表示(デフォルト、推奨) |
|
等高線で表示 |
|
3D立体図で表示 |
|
3D曲面で表示 |
|
ボックスで表示 |
|
散布図で表示 |
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立体図