ROOT学习——二维直方图的多种画法(draw2dopt.C)

二维直方图是数据处理中最常用的存储类型,二维直方图的绘制在ROOT中也有很多种类型,本文通过ROOT官方教程的draw2dopt.C示例,来具体讲述ROOT框架中二维直方图的绘制类型。

下面给出具体代码步骤:

设置不显示统计信息:

gStyle->SetOptStat(0);

设置画板背景颜色:

gStyle->SetCanvasColor(33);

设置画板框架填充颜色:

gStyle->SetFrameFillColor(18);

创建二维函数:

TF2 *f2 = new TF2("f2","xygaus + xygaus(5) + xylandau(10)",-4,4,-4,4);

向函数中的参数进行定值:

Double_t params[] = {130,-1.4,1.8,1.5,1, 150,2,0.5,-2,0.5, 3600,-2,0.7,-3,0.3};
f2->SetParameters(params);

创建二维直方图:

auto h2 = new TH2F("h2","xygaus + xygaus(5) + xylandau(10)",20,-4,4,20,-4,4);

设置直方图内填充颜色:

h2->SetFillColor(46);

生成随机数填充直方图:

h2->FillRandom("f2",40000);

新建小标签:

auto pl = new TPaveLabel();

绘制基本二维类型:

Float_t xMin=0.67, yMin=0.875, xMax=0.85, yMax=0.95; //设置标签绘制位置
Int_t cancolor = 17; 
auto c2h = new TCanvas("c2h","2-d options",10,10,800,600); //创建画板
c2h->Divide(2,2); //将画板横纵分别分为2块
c2h->SetFillColor(cancolor); //设置填充颜色
c2h->cd(1); //定位到第一块区域
h2->Draw(); //绘制直方图(默认散点图)
pl->DrawPaveLabel(xMin,yMin,xMax,yMax,"SCAT","brNDC"); //绘制小标签,brNDC为字体类型
c2h->cd(2); 
h2->Draw("box");  //方块类型
pl->DrawPaveLabel(xMin,yMin,xMax,yMax,"BOX","brNDC");
c2h->cd(3);
h2->Draw("arr");  //箭头类型
pl->DrawPaveLabel(xMin,yMin,xMax,yMax,"ARR","brNDC");
c2h->cd(4);
h2->Draw("colz"); //彩色类型
pl->DrawPaveLabel(xMin,yMin,xMax,yMax,"COLZ","brNDC");
c2h->Update();

绘制数字显示的直方图类型:

auto ctext = new TCanvas("ctext","text option",50,50,800,600); //创建新的画板
gPad->SetGrid(); //设置网格
ctext->SetFillColor(cancolor); //设置填充颜色
ctext->SetGrid(); //设置网格
h2->Draw("text"); //绘制数字类型
pl->DrawPaveLabel(xMin,yMin,xMax,yMax,"TEXT","brNDC"); //绘制小标签
ctext->Update();

绘制轮廓类型的二维直方图:

auto cont = new TCanvas("contours","contours",100,100,800,600); //创建画板
cont->Divide(2,2);
gPad->SetGrid();
cont->SetFillColor(cancolor);
cont->cd(1);
h2->Draw("contz"); //比较艳丽的类型
pl->DrawPaveLabel(xMin,yMin,xMax,yMax,"CONTZ","brNDC");
cont->cd(2);
gPad->SetGrid();
h2->Draw("cont1"); //彩色轮廓线
pl->DrawPaveLabel(xMin,yMin,xMax,yMax,"CONT1","brNDC");
cont->cd(3);
gPad->SetGrid();
h2->Draw("cont2"); //轮廓线(实线+虚线)
pl->DrawPaveLabel(xMin,yMin,xMax,yMax,"CONT2","brNDC");
cont->cd(4);
gPad->SetGrid();
h2->Draw("cont3"); //轮廓线(实线)
pl->DrawPaveLabel(xMin,yMin,xMax,yMax,"CONT3","brNDC");
cont->Update();

绘制lego类型(柱状)的二维直方图:

auto lego = new TCanvas("lego","lego options",150,150,800,600);
lego->Divide(2,2);
lego->SetFillColor(cancolor);
lego->cd(1);
h2->Draw("lego"); //普通柱状类型     
pl->DrawPaveLabel(xMin,yMin,xMax,yMax,"LEGO","brNDC");
lego->cd(2);
h2->Draw("lego1"); //红色柱状类型
pl->DrawPaveLabel(xMin,yMin,xMax,yMax,"LEGO1","brNDC");

绘制柱坐标系的二维直方图:

lego->cd(3);
gPad->SetTheta(61); //设置角度偏离
gPad->SetPhi(-82); //设置长度偏离
h2->Draw("surf1pol"); 
pl->DrawPaveLabel(xMin,yMin,xMax+0.05,yMax,"SURF1POL","brNDC");
lego->cd(4);
gPad->SetTheta(21); gPad->SetPhi(-90);
h2->Draw("surf1cyl"); 
pl->DrawPaveLabel(xMin,yMin,xMax+0.05,yMax,"SURF1CYL","brNDC");
lego->Update();

绘制比较光滑的二维直方图:

auto surf = new TCanvas("surfopt","surface options",200,200,800,600);
surf->Divide(2,2);
surf->SetFillColor(cancolor);
surf->cd(1);
h2->Draw("surf1");   
pl->DrawPaveLabel(xMin,yMin,xMax,yMax,"SURF1","brNDC");
surf->cd(2);
h2->Draw("surf2z");  
pl->DrawPaveLabel(xMin,yMin,xMax,yMax,"SURF2Z","brNDC");
surf->cd(3);
h2->Draw("surf3");   
pl->DrawPaveLabel(xMin,yMin,xMax,yMax,"SURF3","brNDC");
surf->cd(4);
h2->Draw("surf4");   
pl->DrawPaveLabel(xMin,yMin,xMax,yMax,"SURF4","brNDC");
surf->Update();

代码地址:https://github.com/root-project/root/blob/master/tutorials/hist/draw2dopt.C

  • 6
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值