直方图(histogram)与图表(graph)的区别在于使用 bin 分割数据。bin 的原意是垃圾箱或小箱子,在 histogram 中用竖状的 bar 反映数据,这些存放数据的 bar,称为 bin,也就是将整个数据范围划分为一系列统计区间。bin 的宽度取决于数据范围上 bin 的数量。
直方图是一种对数据分布情况的图形表示方式,适合用来表现数量上的差异。直方图支持批量创建和运算。直方图的创建方法有很多:
TH1I *h1 = new TH1I("hist name", "grapg title; x title; unit title", nbins, xmin, xmax)
TH1D* h1 = new TH1D("hist name", "grapg title; x title; unit title", nbins, xmin, xmax)
TH1F *h1 = new TH1F("hist name", "grapg title; x title; unit title", , , )
TH1I *h1 = new TH1I("hist name", "grapg title", , , )
TH1I *h1 = new TH1I("hist name", "grapg title", nbins, xmin, xmax)
auto *h1 = new TH1F
TH1F *h[n] // 批量创建
TH1F h3 = h1*h2; // 通过其他直方图创建
TH1F h3 = 8*h1;
TH1D是缩写,分别表示THistogram类、1维、Double型,同理TH1F表示整数型一维直方图,TH2D表示双精度浮点型二维直方图。
"histogram name"表示直方图名称,直方图存储在本地时,文件名默认使用直方图名称,"grapg title"作 histogram 的图表题,nbins, xmin, xmax分别表示分 bin 数量和轴范围,即将xmin-xmax的范围上分mbins个 bin。
建立 hist 之后,必须向其中填充数据,否则不能正常绘制:
h1->Fill(x); // 填入一个值x
h1->Fill(x, w); // 以权重为w填入一个值x
h1->Fill(x*0.5+10); // 进行计算
当 canvas 和 axis 发生变化时,bin 宽(形式上而非数值上)也会发生变化。如SetLogx(),表示将 x axis 设置为对数坐标的形式,此时 bin 宽(形式上)会随 Logx 而变化,若要求 bin 宽(形式上)不随 logx 变化,可以参考这里。
对 bin 的控制能够更加科学和美观的呈现结论。控制 bin 的方法有:
TH1 *h1 = new TH1I("h1", "a histogram title",100, 0.0, 4.0)
TH1 *h1 = new TH1I("h1", "h1 title", , , ); // 一维整型直方图
nbins+1,因为它包含下范围和上范围的轴值。 double binEdges[] = { 0.0, 0.2, 0.5, 1., 2., 4. };
TH1 *h1 = new TH1D("h1", "h1 title", 6, binEdges );
TH2 *h2 = new TH2D("h2", "h2 title", 6, binEdges , 30, -1.5, 3.5);
>>控制。