我正在尝试编写一个小宏,它从具有4列的ASCII文件中读取数据。但是我想仅将第二列的第二列绘制为(x,y)。
答案 0 :(得分:5)
TGraph
的构造函数可以直接获取CSV文件,请参阅documentation。
TGraph g("data.csv", "%*lg %lg %lg %*lg", ",");
第一个参数是文件名,第二个参数是格式字符串。跳过的列用*
表示;要跳过最后一列,您实际上可以从格式字符串
%*lg %lg %lg
第三个参数是列分隔符,对于您的CSV风格,它可能是,
。
答案 1 :(得分:0)
按照此示例:https://root.cern.ch/root/html534/tutorials/tree/basic.C.html而不是填充直方图制作图表。
答案 2 :(得分:0)
您可以使用上面显示的“CSV Contructor”或只是生成一个空的TGraph(或TGraphErrors),循环CSV文件并添加点。第一行/标题中给出一些常量错误条的示例:
ifstream infile("input.csv");
TGraphErrors *g1 = new TGraphErrors();
g1->SetName("name_for_graph");
g1->SetTitle("Title for your Graph;x values [x unit];y values [y unit]");
Int_t pt=0, nv=0;
Double_t e_vc=0.;
Double_t vs=0., vc=0.;
infile >> e_vs >> e_vc;
while (1) {
if(!infile.good()) break;
infile >> vs >> vc;
g1->SetPoint(pt, vs, vc);
g1->SetPointError(pt, e_vs, e_vc);
pt++;
}
infile.close();
...
g1->Draw("APX");