部門 > ROOT > 統計ボックスをいじくる

h2->Draw("sames")とかして重ね書きした時に、TLegendで凡例をつくってグラフに情報を加えてもいいんだけど、せっかくデフォルトでつくってくれる統計情報を使いたい場合。まずh1->Draw();して、次にh1->Draw("sames");すると、h2の統計ボックスがh1のものに重なってh1のものが見えなくなってしまう。マウスで動かせばいいんだけどこれをスクリプトでやりたい。統計ボックスを取得して場所を変えるようにすればいいのは簡単に想像がつくけど、調べてみたら案外めんどうだった。

最初に RootTalk: Re: Stats box and Draw("same") このリンクが見つかって、これはDraw()のsamesオプションが出来た当時のものらしい。これは情報が不足しててこの通りやってもできなかった。(gPad->Update();)が必要。

結果からいうと TPaveStats に必要な情報は書いてあって例えば以下のようにやればいい。

h1->Draw();
gPad->Update();
TPaveStats *st = (TPaveStats*)h1->FindObject("stats");
st->SetX1NDC(newx1); //new x start position
st->SetX2NDC(newx2); //new x end position
h2->Draw("sames");
gPad->Update();をしないとstがぬるぽしか返してくれなくてエラーになる。コマンドラインだと要らないらしい。

デフォルトだと、片方上下を
st->SetY1NDC(0.6); 
st->SetY2NDC(0.75); 
のように設定すると邪魔にならず大きさも同じくらいになる気がする。(ちょっと小さいようにも見えるのでその辺は微調整。)

キャストすること自体と、キャストするクラス名と、SetX1NDCなどのメソッド名を忘れそうだけど、たんにmeanとかエントリー数とかだけを表示したいだけならわざわざレジェンドつくるよりは簡単。

実は 部門/ROOT/重ね描き でもう書いてた。


名前:
コメント:

すべてのコメントを見る

タグ:

ROOT
最終更新:2013年01月31日 19:12