根中的空 TH2F 直方图

Empty TH2F histogram in Root

我正在尝试从根文件中绘制一个二维图,但由于某种原因,我得到的不是一个漂亮的图,而是一个空白 Canvas,其中包含 918 个条目,平均 x=0,平均 y=47并且两个标准偏差都等于 0。我不知道为什么会发生这种情况,显然问题出在最后一行 h1->Fill(xk,yk);,因为 cout 就在它工作之前。你能帮我弄清楚吗?

这是我的完整代码:

{
#include <iostream>
#include <vector>

using namespace std;

TFile f1("data1.root");
TFile f2("data2.root");

TTreeReader reader("T1", &f1);
TTreeReaderValue<Double_t> X(reader, "X"); 
TTreeReaderValue<Double_t> Y(reader, "Y");

TH2F* h1=new TH2F("h1"," ",10000,0,900,0,70);

vector<vector<Double_t>>v1;

while (reader.Next()) {
    //cout<<*X<<" "<<*Y<<endl;
    vector<Double_t>i;
    i.push_back(*X);
    i.push_back(*Y);
    v1.push_back(i);
}

for (int k=0;k<918;k++)
    {
        Double_t xk=v1[k][0];
        Double_t yk=v1[k][1];
        cout<<xk<<" "<<yk<<endl;
        h1->Fill(xk,yk);
    }

h1->Draw();
}

我怀疑你在

中调用了错误的构造函数
TH2F* h1=new TH2F("h1"," ",10000,0,900,0,70);

来自 here 的 TH2F 构造函数采用 6 个数字参数(x 轴 3 个,y 轴 3 个)或指向数组的指针,而您提供了 5 个。

正在检查您创建的直方图:

root [2] h->GetXaxis()->GetNbins()
(int) 10000
root [3] h->GetYaxis()->GetNbins()
(int) 900

root [6] h->GetXaxis()->GetBinLowEdge(1)
(double) 0.0000000


root [10] h->GetYaxis()->GetBinLowEdge(1)
(double) 0.0000000
root [11] h->GetYaxis()->GetBinUpEdge(900)
(double) 70.000000

root [13] h->GetXaxis()->GetBinUpEdge(10000)
(double) 1.0000000

看起来重载决议选择了与您预期不同的 x 轴实例化。我怀疑(根据您提供的数字)您错过了 y 轴的 bin 数量:

TH2F* h1=new TH2F("h1"," ",10000,0,900,10000,0,70);