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

ユーザ用ツール

サイト用ツール


ja:root:axis

差分

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

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

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
ja:root:axis [2014/05/21 06:54]
kota [Axis 関係]
ja:root:axis [2018/10/20 18:38] (現在)
kota [Grid 関係]
ライン 5: ライン 5:
  
 ===== はじめに ===== ===== はじめに =====
-ROOTでは軸の目盛文字のことを**”label”**といい、[MeV]とか[cm]とかの軸に添わせた文字を**”Title”**という。 +ROOTでは軸の目盛文字のことを**”Label”**といい、[MeV]とか[cm]とかの軸に添わせた文字を**”Title”**という。 
 +また、目盛線のことを**”Tick”**という。
  
  
ライン 30: ライン 30:
     *gPad%%->​%%SetLogy() でも同じ     *gPad%%->​%%SetLogy() でも同じ
     *通常軸に戻すには gPad%%->​%%SetLogy(0)     *通常軸に戻すには gPad%%->​%%SetLogy(0)
 +
 +----
 +
 +==== 軸のラベルをtextにする ====
 +=== 元のラベルを飛ばして、手動でtextを配置する方法 ===
 +<code cpp>
 +hist->​GetXaxis()->​SetLabelOffset(100);​ // 範囲外へ元の数字のラベルを飛ばしてしまう
 +hist->​GetXaxis()->​SetNdivisions(3,​1,​1);​
 +TLatex *label = new TLatex();
 +label->​SetTextSize(0.07);​
 +label->​DrawLatexNDC(0.18,​0.04,"​K_{L}#​rightarrow3#​pi^{0}"​);//​ TLatexでtextを書いていく
 +label->​DrawLatexNDC(0.45,​0.04,"​K_{L}#​rightarrow2#​pi^{0}"​);​
 +label->​DrawLatexNDC(0.72,​0.04,"​K_{L}#​rightarrow2#​gamma"​);​
 +</​code>​
 +
 +=== SetBinLabel functionを使う方法 ===
 +<code cpp>
 +hist->​GetXaxis()->​SetBinLabel(1,"​K_{L}#​rightarrow3#​pi^{0}"​);//​第一引数はibin
 +hist->​GetXaxis()->​SetBinLabel(2,"​K_{L}#​rightarrow2#​pi^{0}"​);//​ ibin=0 はunderflow
 +hist->​GetXaxis()->​SetBinLabel(3,"​K_{L}#​rightarrow2#​gamma"​);​ // ibin=nbin+1 はoverflow を表す
 +hist->​GetXaxis()->​SetLabelSize(0.07);​
 +</​code>​
 +
 +=== TPad::​DrawFrame を使った場合 ===
 +DrawFrame functionで生成されるhistogramは、実はnbin=1000をもつ。
 +必要なbin数にまでrebinしてまとめてやった上でSetBinLabelを呼べば良い。
 +<code cpp>
 +TString LabelText[3] = { "​K_{L}#​rightarrow3#​pi^{0}", ​
 +                         "​K_{L}#​rightarrow2#​pi^{0}", ​
 +                         "​K_{L}#​rightarrow2#​gamma"​ };
 +
 +TCanvas *c = new TCanvas("​c","​c",​700,​500);​
 +TH1F *frame = (TH1F*)c->​DrawFrame(0,​3,​3,​4.5);​
 +
 +frame->​GetXaxis()->​SetNdivisions(3,​1,​1);​
 +frame->​Rebin( frame->​GetNbinsX()/​3 );
 +
 +for(Int_t i = 0 ; i < 3 ; ++i)
 +  frame->​GetXaxis()->​SetBinLabel(i+1,​LabelText[i]);​
 +
 +frame->​GetXaxis()->​SetLabelSize(0.07);​
 +</​code>​
 +----
 +
  
 ==== 軸の色を変える ==== ==== 軸の色を変える ====
ライン 42: ライン 86:
 ==== 軸の範囲を固定する ==== ==== 軸の範囲を固定する ====
  
 +=== 1DヒストグラムでYを固定 ===
 +<code c_mac>
 +  hist->​SetMinimum(0);​
 +  hist->​SetMaximum(100);​
 +</​code>​
 +
 +=== 2DヒストグラムでZを固定 ===
 <code c_mac> <code c_mac>
   hist->​GetZaxis()->​SetRangeUser(0.,​1000);​   hist->​GetZaxis()->​SetRangeUser(0.,​1000);​
ライン 65: ライン 116:
                        // N2 : N1で分割した中の各区画をN2分割する                        // N2 : N1で分割した中の各区画をN2分割する
                        // N3 : N2で分割した中の各区画をさらにN3分割する                        // N3 : N2で分割した中の各区画をさらにN3分割する
 + ​hist->​GetXaxis()->​SetNdivisions(Int_t n=510, Bool_t optim=kTRUE);​
 +                       //​histogram毎に設定することも可。
 +                       //​optim=kTrueだと、指定した分割に近い区切りで、rootが勝手に最適化した区切りが採用される
 +                       //​optim=kFalseだと、指定した通りの区切りに設定される。
 + ​hist->​GetXaxis()->​SetNdivisions(Int_t N1, Int_t N2, Int_t N3, Bool_t optim=kTRUE);​
 +                       //​こんなのもある。この方がわかりやすいかも。
 +
 + ​hist->​SetTickLength(Float_t length = 0.02, Option_t* axis = "​X"​);​
  
  ​gStyle->​SetTickLength(Float_t length = 0.03, Option_t* axis = "​X"​);​  ​gStyle->​SetTickLength(Float_t length = 0.03, Option_t* axis = "​X"​);​
ライン 71: ライン 130:
                        //​内側を正の向きとし、負号の数を入れると外向きになる。                        //​内側を正の向きとし、負号の数を入れると外向きになる。
    
- 
  
 </​code>​ </​code>​
ライン 108: ライン 166:
  ​gStyle->​SetTitleH(Float_t h = 0);             //​Title box の高さ  ​gStyle->​SetTitleH(Float_t h = 0);             //​Title box の高さ
  
- ​gStyle->​SetTitleAlign(Int_t a = 13);+ ​gStyle->​SetTitleAlign(Int_t a = 13);// a=10*h+v, h=1,2,3 for left, center, top,  v=1,2,3 for bottom, middle, top 
 +                                     // gStyle->​SetTitleX(x)などでtitle boxのどこをxに合わせるかを指定する。
  ​gStyle->​SetTitleFillColor(Color_t color = 1);  ​gStyle->​SetTitleFillColor(Color_t color = 1);
  ​gStyle->​SetTitleTextColor(Color_t color = 1);  ​gStyle->​SetTitleTextColor(Color_t color = 1);
  ​gStyle->​SetTitleStyle(Style_t style = 1001);  ​gStyle->​SetTitleStyle(Style_t style = 1001);
  ​gStyle->​SetTitleFontSize(Float_t size = 0);  ​gStyle->​SetTitleFontSize(Float_t size = 0);
- ​gStyle->​SetTitleBorderSize(Width_t size = 2);+ ​gStyle->​SetTitleBorderSize(Width_t size = 2);// タイトルの枠線
  
  
ライン 144: ライン 203:
       *precision は 2:サイズ変更、回転可能 ,​1:不能       *precision は 2:サイズ変更、回転可能 ,​1:不能
     *軸は "​XY"​ のように複数同時に選択することもできる。     *軸は "​XY"​ のように複数同時に選択することもできる。
 +
 +
 +  hist->​GetXaxis()->​SetBinLabel(ibin,"​A"​);​
 +  hist->​GetXaxis()->​SetBinLabel(ibin+1,"​B"​);​
 +などすると、binに名前をつけられる。
 +(SetBinContentsなどと同じで、ibin=1がfirst binを指す)
  
  
ライン 157: ライン 222:
  ​gStyle->​SetGridColor(Color_t color = 0);      // グリッド線の色を指定  ​gStyle->​SetGridColor(Color_t color = 0);      // グリッド線の色を指定
  ​gStyle->​SetGridWidth(Width_t width = 1);      // グリッド線の線幅を指定(ピクセル単位) ​  ​gStyle->​SetGridWidth(Width_t width = 1);      // グリッド線の線幅を指定(ピクセル単位) ​
 +
 + ///// pad毎に指定したい場合
 + ​gPad->​SetGrid(1,​0);////​ x(縦線)を表示(1)、y(横線)を非表示(0)
 + ​gPad->​SetGridx(1);/////​ 一方だけいじるfunctionもある。
 + ​gPad->​SetGridy(1);​
 +</​code>​
 +
 +
 +----
 +
 +===== 軸TitleがLabelと被ってしまうとき =====
 +
 +特にY軸でよく起こると思われる。
 +Canvasのサイズをいじれば解決することもあるが、それでもダメなとき。
 +  * 解決法1:Titleをずらす
 +<code c_mac>
 +h->​GetYaxis()->​SetTitleOffset(1.2)
 +</​code>​
 +数字を大きくする程、軸からTitleが遠ざかる。
 +しかし、大きくしすぎるとcanvasからはみ出して見切れてしまう。そんなときは
 +
 +  * 解決法1−2:canvasのマージンをいじる
 +<code c_mac>
 +  gPad->​SetLeftMargin(0.15);​ //​左側のマージンを広げてTitleの文字が入るようにする
 +  gPad->​SetRightMargin(0.03);//​右側のマージンを狭めてバランスをとる(任意)
 +                  //​全体としてcanvasの中を右側にずらしたことになる。
 +</​code>​
 +とすればよい。
 +<note tip>
 +gPad%%->​%%SetLeftMargin(… などをやった場合、図に修正前の線が残ることがあった。\\
 +この線は図をクリックしたりすると消えた。
 +
 +そのときは、
 +  c->​Modified();​
 +  c->​Update();​
 +  gPad->​Modified();​
 +  gPad->​Update();​
 +と二重で Modified & Update をやることで解決した。
 +</​note>​
 +
 +  * 解決法2:Titleのサイズを小さくする
 +<code c_mac>
 +  h->​GetYaxis()->​SetTitleSize(0.03);​
 +</​code>​
 +
 +  * 解決法3:Labelを軸に寄せる
 +<code c_mac>
 +hist1->​GetYaxis()->​SetLabelOffset(0.)
 +hist1->​GetYaxis()->​SetLabelOffset(-0.03) //​負にすれば軸に食い込む
 +</​code>​
 +
 +  * 解決法4:Labelのサイズを小さくする
 +<code c_mac>
 +  h->​GetYaxis()->​SetLabelSize(0.03);​
 +</​code>​
 +
 +
 +Labelの数字が大き過ぎて入らない、とかの場合は、
 +<code c_mac>
 +  h->​Scale(1e-3)
 </​code>​ </​code>​
 +としてキロ単位にしたりするとよいかも。
ja/root/axis.1400655257.txt.gz · 最終更新: 2014/05/21 06:54 by kota