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"),均表示绘制包涵坐标轴和坐标点的图,并用直线相连:
"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格式绘制/亦或称作阶梯图
成果保存
ROOT 格式支持保存数据,也支持保存分析图片,而且图片保存为 ROOT 格式后还可以反复打开并进行进一步的美化工作,十分便捷。
TGraph::Save():将图表保存为.csv、.tsv或.txt和其他的图像格式。
TGraph::SaveAs():将图表保存任意图像格式。
TPad::Print()orTCanvas::Print():将画布保存为指定格式的文件。
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()的绘图选项有:
"O"
极坐标标签与极坐标图半径正交绘制。
"P"
在每个点位置绘制多标记。
"E"
绘出误差棒
"F"
绘制填充区域(闭合多边形)
"A"
即使极坐标图已经存在,也强制重绘轴
"N"
禁止显示极坐标标签

饼状图 TPie
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.
四维散点图
需要ROOT v.6.30版本以上支持。
多图绘法
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 大小不再能通过统一的数值控制,这非常影响美观。
所以这里有一个稍微复杂的解决方法,能够使它们的大小保持一致,仅供参考:

重叠绘制
将多个 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():设置图例中文本的颜色。
参考
最后更新于