2.2.1 图表

图表的概念

数据可视化的方法有很多,最基本的是使用由两个或三个数组(TGraph / TGraph2D)组成的坐标表示数据的大小或位置,称作 Graph 。这与直方图(Histogram)的表达方式不同。

ROOT 提供了许多图形类,如TGraph图表;TGraphErrors具有对称误差线的图表;TGraph2D由三个数组 X、Y 和 Z 组成的图表等。

图表的使用

TGraph支持批量创建和运算,TGraph的创建方法有:

// 创建了一个名字是name,标题是title,有n个坐标为x,y的点:
TGraph *gr = new TGraph("name", "title", number, x, y)
TGraph* gr = new TGraph("name", "title", number, x, y)
TGraph *gr = new TGraph(number, x, y)
auto gr = new TGraph(number, x, y)
auto gr = new TGraph()        // 使用AddPoint()函数添加坐标点
auto dt = new TGraph2D()      // 二维图表,其他形式同理

绘制图表前需要先定义坐标数组,然后使用TGraph构造图形。e.g.

   int n = 20;
   double x[n], y[n];
   for (int i=0; i<n; i++) {
      x[i] = i*0.1;
      y[i] = 10*sin(x[i]+0.2);
   }
   auto gr = new TGraph (n, x, y);

也支持使用AddPoint()函数添加点:

使用TGraph::Draw()绘制图形,且有多种绘图选项可选:

从文件中读取数据

数据的保存格式有很多,常见的是文本格式和 ROOT 格式:

  • 文本格式数据绘制 Graph

这里要求文件中的坐标中间是空格或者制表符,不可以是逗号。e.g.

从图表中读取数据

  • 数组模式

double *px = gr->GetX(); 将gr1图像中点数据以数组形式输出。

  • 指针模式

ToggleEventStatus()是 Canvas 的成员函数。用于展示指针处的数据状态,打开后,指针所在位置的数据信息会被呈现在面板下方。

  • 高亮模式

高亮模式适用于TGraph(和TH1)类。 当高亮模式打开时,鼠标在点上的移动将以图形表示。 点将突出显示为“点圆”(由标记对象表示)。 此外,任何高亮显示(点变化)都会发出信号TCanvas::Highlighted(),允许用户做出反应并调用自己的函数。 为了更好地理解,请参阅教程$ROOTSYS/tutorials/graphs/hlGraph*.C 文件。

属性设置

图表的轴、标题、颜色均可以进行设置,参见2.3 属性设置

绘图选项

使用以下选项绘制图表,在Draw()命令中它们不区分大小写,可不间隔的使用多个参数如Draw("APL")Draw("A p l"),均表示绘制包涵坐标轴和坐标点的图,并用直线相连:

Option
Description

"A"

绘制出坐标轴

"I"

Combine with option 'A' it draws invisible axis

"L"

在点之间使用直线相连,最终呈现的效果是折线

"F"

绘制填充区域(“CF”绘制平滑填充区域)

"C"

绘制平滑曲线

"*"

每数据点以星号显示

"P"

绘制出每个 marker

"B"

绘制柱状图/条形图/直方图

"1"

当使用柱状图B时,使柱状图从底部开始,否则从0开始

"X+"

X轴在上

"Y+"

Y轴在右

"PFC"

调色板填充颜色:图表的填充颜色取自当前调色板中

"PLC"

调色板线条颜色:图形的线条颜色取自当前调色板中

"PMC"

调色板标记颜色:图表的标记颜色取自当前调色板中

"RX"

X轴刻度反转

"RY"

Y轴刻度反转

"HIST"

以histogram格式绘制/亦或称作阶梯图

E.g. X轴在上Y轴反转和自动取色
X轴在上Y轴反转和自动取色

成果保存

ROOT 格式支持保存数据,也支持保存分析图片,而且图片保存为 ROOT 格式后还可以反复打开并进行进一步的美化工作,十分便捷。

TGraph::Save():将图表保存为.csv.tsv.txt和其他的图像格式。

TGraph::SaveAs():将图表保存任意图像格式。

TPad::Print()orTCanvas::Print():将画布保存为指定格式的文件。

e.g. 将多个画布与图片连续保存到一个 PDF 文件中

TFile::Write():将TTree对象保存到ROOT文件中。e.g.

TFile::mkdir():在 ROOT 文件中创建目录并保存对象。

二维图表

使用符合标准的数据可以绘制二维图表。e.g.

绘图选项

参数
描述

"TRI"

填充Delaunay三角形,绘制表面和边。

"TRIW"

以线框模式绘制Delaunay三角形。

"TRI1"

使用颜色级别填充Delaunay三角形,绘制边。

"TRI2"

使用颜色级别填充Delaunay三角形,不绘制边。

"P"

在每个顶点绘制标记。

"P0"

在每个顶点绘制圆形标记,背景为白色。

"PCOL"

在每个顶点绘制标记,颜色根据Z值决定。

"LINE"

绘制3D折线。

"CONT5"

使用Delaunay三角形绘制等高线图。

极坐标 TGraphPolar

极坐标TGraphPolar()的绘图选项有:

Option
Description

"O"

极坐标标签与极坐标图半径正交绘制。

"P"

在每个点位置绘制多标记。

"E"

绘出误差棒

"F"

绘制填充区域(闭合多边形)

"A"

即使极坐标图已经存在,也强制重绘轴

"N"

禁止显示极坐标标签

e.g. 极坐标例子

饼状图 TPie

e.g. TPiechart

TGraphTime

Example of TGraphTime showing how the class could be used to visualize a set of particles with their time stamp in a MonteCarlo program.

e.g.

四维散点图

需要ROOT v.6.30版本以上支持。

e.g.

多图绘法

ROOT 支持在一张 Canvas 上绘制多幅图表或者直方图。

独立绘制

使用TCanvas::Divide()函数将 Canvas 分割为不同的 Pad,例如将名为c1的 canvas 分为 2 列 3 行写作:c1->Divide(2,3),然后使用c1->cd()分别控制不同的 Pad,Pad 的名称从左向右,从上至下分别是1,2,……,例如可以在pad1上绘制 Histogram,在 pad2 上绘制 Graph。

共轴绘制

最简单的共轴画法是在TCanvas::Divide()函数中添加参数,例如c1->Divide(2,3,0),但当要进行一些美化工作的时候,就会发现它们的标题大小,marker 大小不再能通过统一的数值控制,这非常影响美观。

所以这里有一个稍微复杂的解决方法,能够使它们的大小保持一致,仅供参考:

CanvasPartition https://root.cern.ch/doc/master/canvas2_8C.html
CanvasPartition

重叠绘制

将多个 Graph 绘制在一张 Pad 上,只需要在TGraph::Draw()函数中使用same参数即可。

合并绘制

TMultiGraph::TMultiGraph(),函数支持将一组图作为单个实体进行操作。且绘制时 X 轴和 Y 轴范围会自动计算,因此所有图形都将可见。TMultiGraph::Add()用于将新图表添加到列表中。e.g.

标题、颜色、统计信息均可使用TMultiGraph类中的成员函数,用法与 Graph 一致。

单个 graph 通过mg->GetListOfGraphs()->GetEntries();方式检索。

使用c1.SetFrameBorderMode(0);函数让边界消失。

多页绘制

参见成果保存

图例

为你的图标增加图例可以使得图标更加清晰。图例函数是TLegend,使用AddEntry(TGraphName, "", "opt")增加介绍。option是式选项(如"l"表示线,"p"表示点,"f"表示填充等)。

x1, x2, y1, y2以百分比的形式限制图例位置。

在ROOT中,TLegend类用于在绘图中添加图例(Legend),以帮助解释图形中的不同元素(如曲线、直方图、标记等)。TLegend可以灵活地设置图例的位置、大小、内容、样式等。

  • SetHeader():设置图例的标题。

  • SetTextSize():设置图例中文本的大小。

  • SetBorderSize():设置图例边框的宽度。

  • SetFillColor():设置图例的背景填充颜色。

  • SetFillStyle():设置图例的背景填充样式。

  • SetLineColor():设置图例边框的颜色。

  • SetLineStyle():设置图例边框的样式。

  • SetTextColor():设置图例中文本的颜色。

e.g.


参考

最后更新于