根中的空 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);
我正在尝试从根文件中绘制一个二维图,但由于某种原因,我得到的不是一个漂亮的图,而是一个空白 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);