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:wantto7 [GiriWiki]

ユーザ用ツール

サイト用ツール


ja:root:wantto7

差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
ja:root:wantto7 [2016/12/11 11:08]
kota
ja:root:wantto7 [2018/08/22 17:42] (現在)
kota
ライン 2: ライン 2:
 ---- ----
  
-=== 元のラベルを飛ばして、手動でtextを配置する方法 ===+===== 元のラベルを飛ばして、手動でtextを配置する方法 ​=====
 <code cpp> <code cpp>
 hist->​GetXaxis()->​SetLabelOffset(100);​ // 範囲外へ元の数字のラベルを飛ばしてしまう hist->​GetXaxis()->​SetLabelOffset(100);​ // 範囲外へ元の数字のラベルを飛ばしてしまう
ライン 13: ライン 13:
 </​code>​ </​code>​
  
-=== SetBinLabel functionを使う方法 ===+ 
 +===== SetBinLabel functionを使う方法 ​=====
 <code cpp> <code cpp>
 hist->​GetXaxis()->​SetBinLabel(1,"​K_{L}#​rightarrow3#​pi^{0}"​);//​第一引数はibin hist->​GetXaxis()->​SetBinLabel(1,"​K_{L}#​rightarrow3#​pi^{0}"​);//​第一引数はibin
ライン 21: ライン 22:
 </​code>​ </​code>​
  
-=== TPad::​DrawFrame を使った場合 ===+ 
 +フレームを書くまでのサンプルコード 
 +<code cpp> 
 +  const Int_t   NMode = 3; 
 +  const TString LabelText[NMode] = { "​K_{L}#​rightarrow3#​pi^{0}",​ 
 +                                     "​K_{L}#​rightarrow2#​pi^{0}",​ 
 +                                     "​K_{L}#​rightarrow2#​gamma"​ }; 
 + 
 +  TH1D *frame = new TH1D("​frame","",​NMode,​0,​(Double_t)NMode);​ 
 +  frame->​SetBit(TH1::​kNoStats);​ 
 +  ///// X-axis ///// 
 +  frame->​GetXaxis()->​SetNdivisions(NMode,​1,​1,​false);​ 
 +  frame->​GetXaxis()->​SetLabelSize(0.08);​ 
 +  for(Int_t i = 0 ; i < NMode ; ++i) 
 +    frame->​GetXaxis()->​SetBinLabel(i+1,​LabelText[i]);​ 
 +  ///// Y-axis ///// 
 +  const Double_t Ymin = 0.5; 
 +  const Double_t Ymax = 1.5; 
 +  frame->​SetMinimum(Ymin);​ 
 +  frame->​SetMaximum(Ymax);​ 
 +  frame->​SetYTitle("​Y Title"​);​ 
 +  frame->​SetTitleOffset(0.8,"​Y"​);​ 
 +  frame->​SetTickLength(0.01,"​Y"​);​ 
 + 
 +  TCanvas *c = new TCanvas("​c","​c",​800,​600);​ 
 +  c->​SetTopMargin(0.1);​ 
 +  c->​SetBottomMargin(0.1);​ 
 +  c->​SetLeftMargin(0.1);​ 
 +  c->​SetRightMargin(0.05);​ 
 + 
 +  frame->​Draw();​ 
 +</​code>​ 
 +  * フレームだけ書くにはstat. boxが出てくると邪魔なので、frame->​SetBit(TH1::​kNoStats)で出ないようにしておく。もちろんframe->​SetStats(0)でもOK 
 +  * frame->​GetXaxis()->​SetNdivisions(NMode,​1,​1,​false)で、目盛が余計なところに出ないように設定。第4引数をfalseにしておくことで、rootが余計な気を利かせてくるのを阻止。 
 +  * frame->​SetMinimum(Ymin),​ frame->​SetMaximum(Ymax)でY軸の範囲を指定 
 +  * ラベルの文字数が多かったりすると文字が切れてしまったりするので、c->​SetBottomMargin(..)などでpadの余白を調節。defaultは0.1(10%)。 
 + 
 +{{:​ja:​root:​スクリーンショット_2018-08-23_2.17.03.png?​800|}} 
 + 
 +==== TPad::​DrawFrame を使った場合 ​====
 DrawFrame functionで生成されるhistogramは、実はnbin=1000をもつ。 DrawFrame functionで生成されるhistogramは、実はnbin=1000をもつ。
-必要なbin数にまでrebinしてまとめてやった上でSetBinLabelを呼べば良い。+必要なbin数にまでrebinしてまとめてやった上でSetBinLabelを呼べば良い。\\ 
 +ただし、bin数が1000を割り切らない場合は、ラベルの位置が少々ずれてしまうのが難点。 
 +上のサンプルコードのようにやる方がよいかな
 <code cpp> <code cpp>
-TString LabelText[3] = { "​K_{L}#​rightarrow3#​pi^{0}",​  +const Int_t NLabel = 3; 
-                         ​"​K_{L}#​rightarrow2#​pi^{0}",​  +const TString LabelText[NLabel] = { "​K_{L}#​rightarrow3#​pi^{0}",​  
-                         ​"​K_{L}#​rightarrow2#​gamma"​ };+                                    "​K_{L}#​rightarrow2#​pi^{0}",​  
 +                                    "​K_{L}#​rightarrow2#​gamma"​ };
  
 TCanvas *c = new TCanvas("​c","​c",​700,​500);​ TCanvas *c = new TCanvas("​c","​c",​700,​500);​
 TH1F *frame = (TH1F*)c->​DrawFrame(0,​3,​3,​4.5);​ TH1F *frame = (TH1F*)c->​DrawFrame(0,​3,​3,​4.5);​
  
-frame->​GetXaxis()->​SetNdivisions(3,1,1); +frame->​GetXaxis()->​SetNdivisions(NLabel,1,1,false); 
-frame->​Rebin( frame->​GetNbinsX()/​);+frame->​Rebin( frame->​GetNbinsX()/​NLabel ​);
  
-for(Int_t i = 0 ; i < ; ++i)+for(Int_t i = 0 ; i < NLabel ​; ++i)
   frame->​GetXaxis()->​SetBinLabel(i+1,​LabelText[i]);​   frame->​GetXaxis()->​SetBinLabel(i+1,​LabelText[i]);​
  
 frame->​GetXaxis()->​SetLabelSize(0.07);​ frame->​GetXaxis()->​SetLabelSize(0.07);​
 </​code>​ </​code>​
----- 
  
ja/root/wantto7.1481454516.txt.gz · 最終更新: 2016/12/11 11:08 by kota