#include"TH2F.h"#include"TRandom.h"#include"TCanvas.h"voidNormalizeHistogram(){ std::array<double,6> binsx{0,5,10,20,50,100}; TH1F *orig = new TH1F("orig","Original histogram before normalization",binsx.size() -1,&binsx[0]);// TH1F *orig = new TH1F("orig", // "Original histogram before normalization", 5, 0, 100);gStyle->SetTitleFontSize(0.06); TRandom2 rand;// Filling histogram with random entriesfor (int i =0; i <100000; ++i) {double r =rand.Rndm() *100;orig->Fill(r); } TH1F *norm = (TH1F *)orig->Clone("norm"); // 强制转化orig为TH1F类的指针norm->SetTitle("Normalized Histogram");// Normalizing the Histogram by scaling by 1 / the integral and taking width into accountnorm->Scale(1./norm->Integral(),"width");// norm->Scale(1., "width");// Drawing everything TCanvas *c1 = new TCanvas("c1","Histogram Normalization",700,900);c1->Divide(1,2);c1->cd(1);orig->Draw();c1->cd(2);norm->Draw();}
绘图选项
支持1D和2D直方图的选项
Option
Description
"E"
绘制误差棒。
"HIST"
绘制直方图。
"FUNC"
当直方图具有拟合函数时,此选项允许仅绘制拟合结果。
"SAME"
叠加在同一垫中的前一张图片上。
"SAMES"
与“SAME”相同,强制绘制统计框。
"PFC"
调色板填充颜色:直方图的填充颜色取当前调色板。
"PLC"
调色板线条颜色:直方图的线条颜色取当前调色板。
"PMC"
调色板标记颜色:直方图的标记颜色取当前调色板。
"LEGO"
绘制去除隐藏线的乐高图。
"LEGO1"
绘制隐藏表面移除的乐高图.
"LEGO2"
使用颜色绘制乐高图以显示单元格内容 当选项“0”与任何乐高选项一起使用时,不会绘制空箱。
"LEGO3"
绘制一个带有隐藏表面去除的乐高图,与乐高1类似,但不绘制每个乐高条的边界线。
"LEGO4"
绘制一个带有隐藏表面去除的乐高图,就像乐高1一样,但每个乐高条上没有阴影效果。
"TEXT"
将 bin 内容绘制为文本(通过 gStyle->SetPaintTextFormat 设置格式)。
"TEXTnn"
将 bin 内容绘制为角度 nn (0 < nn <= 90) 的文本.
"X+"
TX 轴绘制在图的顶部。
"Y+"
Y 轴绘制在图的右侧。
"MIN0"
将 Y 轴的最小值设置为 0,相当于 gStyle->SetHistMinimumZero()。
支持1D直方图的选项
Option
Description
"AH"
绘制无轴直方图。 “A”可以与任何绘图选项组合。 例如,“AC”将直方图绘制为无轴的平滑曲线。
"]["
选择此选项时,不会绘制直方图的第一条和最后一条垂直线。
"B"
条形图选项。
"BAR"
与选项“B”类似,但可以用 3D 效果绘制条形。
"HBAR"
“HBAR” 与选项“BAR”类似,但条形是水平绘制的。
"C"
通过直方图箱绘制平滑曲线。
"E0"
绘制误差线。 为内容为 0 的箱绘制标记。 与 E1 或 E2 结合使用可避免误差条剪切。
"E1"
在边缘处用垂直线绘制误差条。
"E2"
用矩形绘制误差线。
"E3"
通过垂直误差线的端点绘制填充区域。
"E4"
通过误差线的端点绘制平滑的填充区域。
"E5"
与 E3 类似,但忽略内容为 0 的bin。
"E6"
与 E4 类似,但忽略内容为 0 的bin。
"X0"
当与“E”选项之一一起使用时,它会像 gStyle->SetErrorX(0) 那样抑制沿 X 的误差条。
{ auto c1 = new TCanvas("c1","c1",600,600);c1->Divide(1,2); auto hcol23 = new TH2F("hcol23","Option COLZ example ",40,-4,4,40,-20,20); auto hcol24 = new TH2F("hcol24","Option COLZ1 example ",40,-4,4,40,-20,20);float px, py;for (Int_t i =0; i <25000; i++) {gRandom->Rannor(px,py);hcol23->Fill(px,5*py);hcol24->Fill(px,5*py); }hcol23->Fill(0.,0.,-200.);hcol24->Fill(0.,0.,-200.);c1->cd(1); hcol23->Draw("COLZ");c1->cd(2); hcol24->Draw("COLZ1");}
E.g. POL
{ auto c1 = new TCanvas("c1","c1",600,400); auto hcol1 = new TH2F("hcol1","Option COLor combined with POL",40,-4,4,40,-4,4);float px, py;for (Int_t i =0; i <25000; i++) {gRandom->Rannor(px,py);hcol1->Fill(px,py); }hcol1->Draw("COLZPOL");}
E.g. COUNTZ
{ auto c1 = new TCanvas("c1","c1",600,400); auto hcontz = new TH2F("hcontz","Option CONTZ example ",40,-4,4,40,-20,20);float px, py;for (Int_t i =0; i <25000; i++) {gRandom->Rannor(px,py);hcontz->Fill(px-1,5*py);hcontz->Fill(2+0.5*px,2*py-10.,0.1); }hcontz->Draw("CONTZ");}
E.g. LEGO2Z
{ auto c2 = new TCanvas("c2","c2",600,400); auto hlego2 = new TH2F("hlego2","Option LEGO2Z example ",40,-4,4,40,-20,20);float px, py;for (Int_t i =0; i <25000; i++) {gRandom->Rannor(px,py);hlego2->Fill(px-1,5*py);hlego2->Fill(2+0.5*px,2*py-10.,0.1); }hlego2->Draw("LEGO2Z");}
E.g. SURF1
{ auto c2 = new TCanvas("c2","c2",600,400); auto hsurf1 = new TH2F("hsurf1","Option SURF1 example ",30,-4,4,30,-20,20);float px, py;for (Int_t i =0; i <25000; i++) {gRandom->Rannor(px,py);hsurf1->Fill(px-1,5*py);hsurf1->Fill(2+0.5*px,2*py-10.,0.1); }hsurf1->Draw("SURF1");}
{ TH2D h2("h2","Histogram filled with random numbers",40,-4,4,40,-20,20);float px, py;for (int i =0; i <25000; i++) {gRandom->Rannor(px,py);h2.Fill(px,5*py); }h2.DrawCopy("LEGO1");}
E.g. 1维高斯和2维高斯投影,及多种2维展示风格
voidhistogram2D(){ TCanvas *c = new TCanvas("c","c",800,1200);c->Divide(2,3); //新建画布800*1200,布局为2*3,横*高,主函数名需与文件名一致,即该文件名为"histogram3D.c"float x,y; TH1F *h1 = new TH1F("h1","1D histogram",50,-10,10); TH2F *h2 = new TH2F("h2","2D histogram",50,-10,10,50,-10,10); TH2F *h3 = new TH2F("h3","2D histogram",50,-10,10,50,-10,10); TH1D *ph; //一维投影for (int i=0;i<30000;i++){ x=gRandom->Gaus(0,0.5); y=gRandom->Gaus(0,1);h1->Fill(3*x);h2->Fill(x,y);h3->Fill(x,y); }c->cd(1);h1->Draw();c->cd(2);h2->Draw("lego");c->cd(3);h3->Draw("lego2");c->cd(4); ph =h2->ProjectionX();ph->SetTitle("The projection of n2 on X");ph->Draw();}
{ auto hs = new THStack("hs",""); auto h1 = new TH1F("h1","test hstack",10,-4,4);h1->FillRandom("gaus",20000);h1->SetFillColor(kRed);hs->Add(h1); auto h2 = new TH1F("h2","test hstack",10,-4,4);h2->FillRandom("gaus",15000);h2->SetFillColor(kBlue);hs->Add(h2); auto h3 = new TH1F("h3","test hstack",10,-4,4);h3->FillRandom("gaus",10000);h3->SetFillColor(kGreen);hs->Add(h3); auto cs = new TCanvas("cs","cs",10,10,700,900); TText T; T.SetTextFont(42); T.SetTextAlign(21);cs->Divide(2,2);cs->cd(1); hs->Draw(); T.DrawTextNDC(.5,.95,"Default drawing option");cs->cd(2); hs->Draw("nostack"); T.DrawTextNDC(.5,.95,"Option \"nostack\"");cs->cd(3); hs->Draw("pads"); //T.DrawTextNDC(.5,.95,"Option \"nostackb\"");cs->cd(4); hs->Draw("nostackb"); T.DrawTextNDC(.5,.95,"Option \"nostackb\"");}