この文書の現在のバージョンと選択したバージョンの差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
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> | ||
+ | としてキロ単位にしたりするとよいかも。 |