この文書の現在のバージョンと選択したバージョンの差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
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()/3 ); | + | frame->Rebin( frame->GetNbinsX()/NLabel ); |
- | for(Int_t i = 0 ; i < 3 ; ++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> | ||
- | ---- | ||