2015-05-27 18 views
0

我正在嘗試編寫一個小型宏,它從具有4列的ASCII文件中讀取數據。但我想只將第二列的第三列繪製爲(x,y)。繪製ROOT中的ASCII文件

+0

我,你不使用PyROOT的假設下,增加了[C++]標籤。 –

回答

5

TGraph的構造函數可以直接採用CSV文件,請參閱documentation

TGraph g("data.csv", "%*lg %lg %lg %*lg", ","); 

第一個參數是文件名,第二個參數是格式字符串。跳過的列用*表示;跳過最後一欄,你可以實際上只是從格式字符串忽略它,

%*lg %lg %lg 

第三個參數是列分隔符,這可能是,爲您的CSV的味道。

0

您可以使用上面顯示的「CSV構造器」,或者簡單地生成一個空的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");