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|}}