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
====== 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:スクリーンショット_2018-08-03_13.51.56.png?800|}}