この文書の現在のバージョンと選択したバージョンの差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
ja:root:stat [2015/11/27 14:43] kota [統計BOXのIntegralなどの表示桁数を変更したい] |
ja:root:stat [2019/04/18 16:23] (現在) kota [Statistics box内のtextの編集] |
||
---|---|---|---|
ライン 32: | ライン 32: | ||
gStyle->SetStatH(3); //高さを変える | gStyle->SetStatH(3); //高さを変える | ||
gStyle->SetStatW(0.15); //幅を変える (Canvas?全体の長さを1とする) | gStyle->SetStatW(0.15); //幅を変える (Canvas?全体の長さを1とする) | ||
- | gStyle->SetStatFontSize(30); //フォントのサイズを変える | + | gStyle->SetStatFontSize(0.04); //フォントのサイズを変える |
</code> | </code> | ||
ライン 67: | ライン 67: | ||
* 2つのヒストグラムの統計情報を縦に並べるには、例えば以下のようにすればよい | * 2つのヒストグラムの統計情報を縦に並べるには、例えば以下のようにすればよい | ||
<code c_mac> | <code c_mac> | ||
+ | h0->SetLineColor(kBlack); | ||
h0->Draw(); | h0->Draw(); | ||
+ | h1->SetLineColor(kRed); | ||
h1->Draw("sames"); // "same" だとh0の統計boxが消えてしまう | h1->Draw("sames"); // "same" だとh0の統計boxが消えてしまう | ||
- | |||
gPad->Update(); | gPad->Update(); | ||
| | ||
- | Float_t st0_lower_left_x = 0.6; | + | const Float_t st0_lower_left_x = 0.6; |
- | Float_t st0_lower_left_y = 0.75; | + | const Float_t st0_lower_left_y = 0.75; |
- | Float_t st_Width = 0.39; | + | const Float_t st_Width = 0.39; |
- | Float_t st_Height = 0.24; | + | const Float_t st_Height = 0.24; |
- | Float_t st1_lower_left_x = st0_lower_left_x; | + | const Float_t st1_lower_left_x = st0_lower_left_x; |
- | Float_t st1_lower_left_y = st0_lower_left_y - st_Height - 0.005; //-0.005 は2つのboxの隙間 | + | const Float_t st1_lower_left_y = st0_lower_left_y - st_Height - 0.005; //-0.005 は2つのboxの隙間 |
//h0 の統計boxについて | //h0 の統計boxについて | ||
- | TPaveStats *st10 = (TPaveStats*)h0->FindObject("stats"); | + | TPaveStats *st0 = (TPaveStats*)h0->FindObject("stats"); |
- | st10->SetX1NDC(st0_lower_left_x); | + | st0->SetX1NDC(st0_lower_left_x); |
- | st10->SetY1NDC(st0_lower_left_y); | + | st0->SetY1NDC(st0_lower_left_y); |
- | st10->SetX2NDC(st0_lower_left_x + st_Width); | + | st0->SetX2NDC(st0_lower_left_x + st_Width); |
- | st10->SetY2NDC(st0_lower_left_y + st_Height); | + | st0->SetY2NDC(st0_lower_left_y + st_Height); |
+ | st0->SetLineColor(kBlack); | ||
//h1 の統計boxについて | //h1 の統計boxについて | ||
- | TPaveStats *st11 = (TPaveStats*)h1->FindObject("stats"); | + | TPaveStats *st1 = (TPaveStats*)h1->FindObject("stats"); |
- | st11->SetX1NDC(st1_lower_left_x); | + | st1->SetX1NDC(st1_lower_left_x); |
- | st11->SetY1NDC(st1_lower_left_y); | + | st1->SetY1NDC(st1_lower_left_y); |
- | st11->SetX2NDC(st1_lower_left_x + st_Width); | + | st1->SetX2NDC(st1_lower_left_x + st_Width); |
- | st11->SetY2NDC(st1_lower_left_y + st_Height); | + | st1->SetY2NDC(st1_lower_left_y + st_Height); |
+ | st1->SetLineColor(kRed); | ||
//反映させる | //反映させる | ||
c->Modified(); // ”変更した” というフラグを立ててやる | c->Modified(); // ”変更した” というフラグを立ててやる | ||
ライン 104: | ライン 107: | ||
c->cd(1)->Update(); | c->cd(1)->Update(); | ||
</code> | </code> | ||
+ | |||
+ | |||
+ | ---- | ||
+ | ==== Statistics box内のtextの編集 ==== | ||
+ | |||
+ | [[https://root.cern.ch/doc/v608/classTPaveStats.html|公式のクラスリファレンス]]の” Statistics box editing”のところをみると良い。 | ||
+ | |||
+ | 参考コードを以下に。 | ||
+ | <code cpp> | ||
+ | |||
+ | void Stat() | ||
+ | { | ||
+ | TCanvas *c1 = new TCanvas("c1","c1",800,600); | ||
+ | c1->SetGrid(0,0); | ||
+ | TH1D *hist = new TH1D("hist","",60,-3,3); | ||
+ | hist->FillRandom("gaus",1000); | ||
+ | hist->SetLineWidth(3); | ||
+ | hist->SetLineColor(kBlue); | ||
+ | hist->Draw(); | ||
+ | |||
+ | /////////////// | ||
+ | ///// fit ///// | ||
+ | /////////////// | ||
+ | TF1 *gaus1 = new TF1("gaus1","gausn",-3,3);///// [0]*exp(-0.5*( (x-[1])/[2])**2 ) / (sqrt(2*pi)*[2]) | ||
+ | gaus1->SetLineWidth(5); | ||
+ | gaus1->SetLineColor(kRed); | ||
+ | Double_t FitRangeMin = -2.5; | ||
+ | Double_t FitRangeMax = 2.5; | ||
+ | //hist->Fit("gaus1","","",FitRangeMin,FitRangeMax); | ||
+ | hist->Fit("gaus1","0","",FitRangeMin,FitRangeMax);///// 0はfit関数を描かないようにするため | ||
+ | |||
+ | gaus1->SetRange(FitRangeMin,FitRangeMax);///// fit rangeでだけ関数を表示するように | ||
+ | gaus1->Draw("same"); | ||
+ | |||
+ | Double_t Gaus1Mean = gaus1->GetParameter(1); | ||
+ | Double_t Gaus1Sigma = gaus1->GetParameter(2); | ||
+ | cout << "Gaus-1 : " << endl; | ||
+ | cout << " Mean = " << Gaus1Mean << endl; | ||
+ | cout << " Sigma = " << Gaus1Sigma << endl; | ||
+ | cout << "Chisq/NDF = " << gaus1->GetChisquare() <<"/"<< gaus1->GetNDF() << endl; | ||
+ | |||
+ | //////////////// | ||
+ | ///// stat ///// | ||
+ | //////////////// | ||
+ | gPad->Modified();/////TPad::Modified()はいらないけどとりあえず呼んでおけばいいんでなかろうか。 | ||
+ | gPad->Update();///// TPad::Update() is needed <---こちらは必要 | ||
+ | TPaveStats *st1 = (TPaveStats*)hist->FindObject("stats"); | ||
+ | //TPaveStats *st1 = (TPaveStats*)gPad->GetPrimitive("stats"); | ||
+ | st1->SetName("mystats");///// <-- 名前を変更しておく必要あり(そうしないと、hist->SetStats(0)で消えてしまう) | ||
+ | st1->SetOptFit(0); | ||
+ | ///// TPad::Modified() and TPad::Update() are needed to reflect st1->SetOptFit(0) | ||
+ | gPad->Modified(); | ||
+ | gPad->Update(); | ||
+ | |||
+ | ///// position and size of the stat. box | ||
+ | st1->SetX1NDC(0.90-0.25); | ||
+ | st1->SetY1NDC(0.90-0.25); | ||
+ | st1->SetX2NDC(0.90); | ||
+ | st1->SetY2NDC(0.90); | ||
+ | //// frame of the stat. box | ||
+ | st1->SetLineWidth(3); | ||
+ | st1->SetLineStyle(2); | ||
+ | st1->SetLineColor(kMagenta); | ||
+ | |||
+ | ///// modify/remove lines | ||
+ | TList *listOfLines = st1->GetListOfLines(); | ||
+ | st1->GetLineWith("Entries")->SetTextColor(kBlue); | ||
+ | st1->GetLineWith("Mean")->SetTextColor(kBlue); | ||
+ | TText *tconst = st1->GetLineWith("RMS"); | ||
+ | listOfLines->Remove(tconst); | ||
+ | |||
+ | ///// Add new lines in the stat box. | ||
+ | ///// Note that "=" is a control character | ||
+ | TLatex *TextGaus1Mean = new TLatex(0,0,Form("Gaus Mean = %.2f",Gaus1Mean)); | ||
+ | TextGaus1Mean->SetTextColor(kRed); | ||
+ | TextGaus1Mean->SetTextSize(0);///// 0にしておくことで、フォントサイズを自動で調整してくれる | ||
+ | listOfLines->Add(TextGaus1Mean); | ||
+ | TLatex *TextGaus1Sigma = new TLatex(0,0,Form("Gaus Sigma = %.2f",Gaus1Sigma)); | ||
+ | TextGaus1Sigma->SetTextColor(kRed); | ||
+ | TextGaus1Sigma->SetTextSize(0);///// 0にしておくことで、フォントサイズを自動で調整してくれる | ||
+ | listOfLines->Add(TextGaus1Sigma); | ||
+ | |||
+ | ///// the following line is needed to avoid that the automatic redrawing of stats | ||
+ | hist->SetStats(0); | ||
+ | |||
+ | gPad->Modified();///// TPad::Modified() is needed | ||
+ | gPad->Update(); | ||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | </code> | ||
+ | ---- | ||
+ | ポイントは、 | ||
+ | * 統計ボックス内のtextにアクセスするには、TList* TPaveStats::GetListOfLines() でtextのリストを取ってきてやる | ||
+ | * TAttText::SetTextSize(0)とすることで、フォントサイズを自動調整 | ||
+ | * TPad::Modified(), TPad::Update()を(こまめに?)呼んでやる | ||
+ | * TPaveStats::SetName("hoge")で名前を変えてやる | ||
+ | * 変更後、TH1::SetStats(0)を呼んでやる | ||
+ | あたりだろうか。 | ||
+ | {{ :ja:root:stat_edit.png?400 |}} | ||
+ | ---- |