如何从 TTree 中绘制 COLZ TH2F?

How to Draw a COLZ TH2F from a TTree?

我正在尝试从树中绘制 COLZ 图,即带有颜色条的 2D 直方图,并且能够自己定义 bin 的数量。 我的树名为事件:

我试过:

event->Draw("x:y>>hist1(1000,100,500,1000,0,500)", "x>100");
TH2F * hist1 = (TH2F*)gDirectory->Get("hist1");
hist1->Draw("COLZ");

和:

event->Draw("x:y>>hist1(1000,100,500,1000,0,500)", "x>100", "COLZ");
TH2F * hist1 = (TH2F*)gDirectory->Get("hist1");
hist1->Draw();

但都不会绘制直方图。

这将绘制一个散点图:

event->Draw("x:y>>hist1(1000,100,500,1000,0,500)", "x>100");
TH2F * hist1 = (TH2F*)gDirectory->Get("hist1");
hist1->Draw();

这将绘制一个 COLZ 图,但使用这种方法我无法自己定义 bin 大小:

 event->Draw("x:y", "x>100", "COLZ");

我无法重现该问题,您的第一次尝试对我有效:

event->Draw("x:y>>hist1(1000,100,500,1000,0,500)", "x>100");
TH2F * hist1 = (TH2F*)gDirectory->Get("hist1");
hist1->Draw("COLZ");

它也可以在一行中工作:

event->Draw("x:y>>hist1(1000,100,500,1000,0,500)", "x>100", "COLZ");

在您的第三种情况下,如果 hist1->Draw(); 绘制散点图,那么 hist1->Draw("COLZ"); 也应该有效。你运行也是这样吗?如果是这样,你能提供一个Minimal, Complete, and Verifiable example吗?

注意:hist1->Draw();的结果不是散点图(ROOT在这里会产生误导),它是一个直方图,其中bin内容用点表示。参见例如this plot 您可以在其中猜测底层 bin。

感谢 Keldorn 的回答,但问题出在我没有发布的部分代码中。

我正在使用以下方式访问我的根文件:

 TFile f("file.root"); 
 TTree* event = (TTree*)f.Get("EventTree");

将其更改为:

TFile *f = new TFile("file.root");
TTree* event = (TTree*)f->Get("EventTree");

解决了我所有的直方图问题!