例えばヒストグラムを描いた後に、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); }