本篇文章介绍一个实例,运用TCanvas,TH1类将两张一维直方图平行绘制在同一张画布上,显示更多统计量,并保存为png格式。
代码模板如下:
#include<iostream>
using namespace std;
int Parallel_histogram()
{
TCanvas* c1 = new TCanvas("c1","Parallel_histogram",1920,1080);
c1->Divide(2,1,0.01,0.01);
gStyle->SetOptStat("eMRSK");
c1->cd(1);
TH1D* th1 = new TH1D("th1","Histo_Gaus;X_Axis;Y_Axis",100,0.,10.);
for(Int_t i=0;i<10000;++i)
{
Double_t r=gRandom->Gaus(5,1);
th1->Fill(r);
}
th1->Draw();
c1->cd(2);
TH1D* th2 = new TH1D("th2","Histo_Poisson;X_Axis;Y_Axis",100,0.,10.);
for(Int_t i=0;i<10000;++i)
{
Double_t r=gRandom->Poisson(5);
th2->Fill(r);
}
th2->Draw();
c1->SaveAs("Parallel_histogram.png");
c1->Delete();
th1->Delete();
th2->Delete();
return 0;
}
图片如下:
根据自身需求基于上述代码更改填充数据即可,或更改画布划分在一张画布上画出更多函数图、直方图或折线图。
可以注意到的是,两图的Y轴均被遮挡,统计框信息显示字体过小,所占空间较大。这是ROOT自身画布默认设置导致的问题,通过代码可以调节,但是太复杂,推荐方法注释掉上述代码return语句前的四句,通过GUI手动调节后(可以看我之前的文章),手动保存为图片。
调节后的图片如下:
调节后的图片更加美观。