ROOTでX軸の表示を時間にする。

ROOTで横軸を時間で表示したい。入力する値はUnixタイムとする。
今回はTGraphでhoge.dataファイルを読み込ませ2次元プロットを表示する。
hoge.dataには、1列目にUnixタイム、2列目には適当な値が入っている。

     TGraph *g = new TGraph("hoge.data");

     gStyle->SetTimeOffset(-788918400);
     gStyle->SetNdivisions(505);
     g->GetXaxis()->SetTimeDisplay(1);
     g->GetXaxis()->GetXaxis()->SetTimeFormat("%m/%d %H:%M");

以上の様に記述するとROOTで描画したグラフのX軸を時刻にできる。
TApplication appやDraw()は省略している。



ROOTの時間の取り扱いについては注意が必要である。通常Unixタイムは1970年1月1日0時0分からの経過秒数で表されるのに対し、ROOTの時間は1995年1月1日0時0分を基準としている。従ってROOTで時間表示をさせる場合オフセットを引いてやる必要がある。SetTimeOffsetはこのオフセットの調整を行なっている。
またSetTimeFormatは表示形式を指定している。このままDrawすると日付と時刻が重なって表示されてしまうため、表示間隔を荒くする必要がある。gStyle->SetNdivisions(505)でデフォルトの値より荒く表示させている。
他にも2段表示にして、重なりを回避するにはSetTimeFormat("#splitline{%y/%m/%d}{%H:%M}")などと記述する。