Deprecated: Array and string offset access syntax with curly braces is deprecated in /mnt/hep_web/hep_web/member/n-kota/dokuwiki/inc/init.php on line 542
ja:root:wantto15 [GiriWiki]

ユーザ用ツール

サイト用ツール


ja:root:wantto15

1次元ヒストグラムを描いた後、フレームの最大値・最小値を知りたい


例えばヒストグラムを描いた後に、1σのところにフレームいっぱいに縦に線をいれたい、とする。 そうした時にヒストグラムのフレームの上限、下限の値が知りたいが、それはヒストグラムのエントリー数によっても変わるし、 Y軸がリニアかログかでも変わる。その辺をうまくやる方法が、

  Double_t TPad::GetUymin();
  Double_t TPad::GetUymax();

を使うこと。(GetUxminなんかもある)
ただし、Logの場合は常用対数値で返ってくるので、TMath::Power(10,val)のように一段かませてやることが必要。

また、hist→GetYaxis()→GetXmax() でできるかと思い試してみたが、1が返ってきてうまくいかなかった。 多分Y軸はビンとして扱っていないからだめなのかな。

ちなみにTPad::GetX1(), TPad::GetY2() などは、Canvasの端での(フレームの座標系での)X,Yの値を返してくれるよう。

注意点は、
GetUymin()等を呼ぶ前にTPad::Update()を呼んでやる
ことが必要で、これをしないと値が更新されない。

以下例

{
  TCanvas *c = new TCanvas("c","c",800,600);
  TH1D *hist = new TH1D("hist","gaussian",100,-5,5);
  hist->FillRandom("gaus",100000);
  hist->Draw();
 
  //gPad->SetLogy();///// option
 
  gPad->Update();///// gPad->SetLogy()よりも後で呼んでやる必要がある
 
  /////            /////
  ///// Draw lines /////
  /////            /////
  TLine *line = new TLine();
  line->SetLineWidth(3);
  line->SetLineColor(kRed);
  Double_t Ymin, Ymax;
  if( gPad->GetLogy() ){ ///// Logarithmic axis
    Ymin = TMath::Power( 10, gPad->GetUymin() );
    Ymax = TMath::Power( 10, gPad->GetUymax() );
  }else{                 ///// Linear axis
    Ymin = gPad->GetUymin();
    Ymax = gPad->GetUymax();
  }
  line->DrawLine(-1, Ymin, -1, Ymax);
  line->DrawLine( 1, Ymin,  1, Ymax);
}

ja/root/wantto15.txt · 最終更新: 2018/08/07 06:14 by kota