この文書の現在のバージョンと選択したバージョンの差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
ja:root:color [2014/04/04 05:59] kota [Marker size] |
ja:root:color [2018/08/30 05:24] (現在) kota [カラーバー(TPaletteAxis)] |
||
---|---|---|---|
ライン 21: | ライン 21: | ||
</code> | </code> | ||
- | * 使い方は、SetFillColor(kRed) , SetFillColor(kYellow-10) , SetLineColor(kMagenta+2) のように色名+数字で指定する | + | * 色の指定の時に、SetFillColor(kRed) , SetFillColor(kYellow-10) , SetLineColor(kMagenta+2) のように色名+数字で指定する |
- | + | * 実態はRTypes.hに記されていて、 | |
+ | <code c_mac> | ||
+ | enum EColor { kWhite =0, kBlack =1, kGray=920, | ||
+ | kRed =632, kGreen =416, kBlue=600, kYellow=400, kMagenta=616, kCyan=432, | ||
+ | kOrange=800, kSpring=820, kTeal=840, kAzure =860, kViolet =880, kPink=900 }; | ||
+ | </code> | ||
+ | のように各key wardが数字に対応している。 | ||
---- | ---- | ||
- | |||
===== Fill Style (TAttFill) ===== | ===== Fill Style (TAttFill) ===== | ||
ライン 84: | ライン 88: | ||
---- | ---- | ||
+ | ===== その他 ===== | ||
+ | |||
+ | ==== CreateGradientColorTable ==== | ||
+ | |||
+ | <code c_mac> | ||
+ | TColor::CreateGradientColorTable(UInt_t Number, Double_t* Stops, Double_t* Red, Double_t* Green, Double_t* Blue, UInt_t NColors, Float_t alpha = 1.) | ||
+ | </code> | ||
+ | * グラデーションを作る関数 | ||
+ | * 第1引数で区切り色の数を指定し、その間を第6引数の数の段数で連続的につなぐ | ||
+ | * RGB空間にNRGBs個の点を打ち、それらを順番に線分でつないでいく。その線分上の点をNcont個取り出してグラデーションを作る(下の例)。 | ||
+ | * 第2〜第5引数は第1引数(Number)で指定された要素をもつ配列で、第2引数が各区切り色の場所を表す(0 ~ 1 で表す) | ||
+ | * 第3〜第5引数はRGBで、一般的なRGB value を255で割って規格化してある(0 ~ 1であらわされる) | ||
+ | * 第六引数の配列要素は配列の番号が大きくなるにつれ大きくならなくてはならない(0〜1の間。0.から始まり1.で終わる) | ||
+ | * 最後の引数(第7引数)alpha は不透明度。0~1の値をとり、0で完全に透明、1で完全に不透明になる。 | ||
+ | * PDF,SVG,gif,jpg,png形式で保存したときにのみ透明度の効果が見える | ||
+ | * 何も指定しなければ alpha = 1 が入る | ||
+ | |||
+ | {{:ja:root:grad1.png?800|}} | ||
+ | |||
+ | <code c_mac> | ||
+ | const Int_t NRGBs = 5; //色の区切りの数(区切り色 = RGB空間に打たれた点のさす色) | ||
+ | const Int_t NCont = 255; //グラデーションの段数 | ||
+ | |||
+ | //グラデーションの色を配列で指定 | ||
+ | Double_t stops[NRGBs] = { 0.00, 0.34, 0.61, 0.84, 1.00 }; //stopはカラーバーでの位置(比率)。つまり、区切りの色がくる場所。 | ||
+ | //Red、Green,Blueは各区切り位置でのR,G,Bの値(区切り色を指定) | ||
+ | Double_t Red[NRGBs] = { 0.00, 0.00, 0.87, 1.00, 0.51 }; //RGBは一般的なRGBの値を255で割って規格化(?)している。 | ||
+ | Double_t Green[NRGBs] = { 0.00, 0.81, 1.00, 0.20, 0.00 }; //縦に見る。カラーバーの位置0.00でのRGB=(0.00,0.00,0.51), | ||
+ | Double_t Blue[NRGBs] = { 0.51, 1.00, 0.12, 0.00, 0.00 }; //位置0.34でのRGB=(0.00,0.81,1.00),のようになっている。 | ||
+ | TColor::CreateGradientColorTable(NRGBs, stops, Red, Green, Blue, NCont);//グラデーションを作る。勝手にgStyle->SetPalette()してくれる | ||
+ | gStyle->SetNumberContours(NCont); | ||
+ | |||
+ | ////////// DRAW ////////// | ||
+ | TH2D *h = new TH2D("h","h",200,-3,3,200,-3,3); | ||
+ | for(Int_t i = 0 ; i < 5000000 ; i++) | ||
+ | h->Fill(gRandom->Gaus(0.,1.) , gRandom->Gaus(0.,1.)); | ||
+ | h->Draw("colz"); | ||
+ | h->SetTitle(0); //左上のtitleが邪魔なので削除している | ||
+ | gStyle->SetStatX(0.9); //stat box をずらしている | ||
+ | </code> | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | ==== SetPalette ==== | ||
+ | |||
+ | * 上と同じ2Dヒストを gStyle%%->%%SetPalette(1) (上)と gStyle%%->%%SetPalette(50) (下)で書いてみた。 | ||
+ | |||
+ | {{:ja:root:grad2.png?800|}} | ||
+ | |||
+ | {{:ja:root:grad3.png?800|}} | ||
+ | |||
+ | |||
+ | * 55 と 53 も使いやすそう | ||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
==== デフォルトの色を変更する ==== | ==== デフォルトの色を変更する ==== | ||
<code c_mac> | <code c_mac> | ||
- | gROOT->GetColor(3)->SetRGB(0., 0.7, 0.); // Green (0, 1, 0)->(0, 0.7, 0) | + | gROOT->GetColor(3)->SetRGB(0., 0.7, 0.); // Green |
- | gROOT->GetColor(5)->SetRGB(1., 0.5, 0.); // Yellow (1, 1, 0)->(1, 0.5, 0) | + | gROOT->GetColor(5)->SetRGB(1., 0.5, 0.); // Yellow |
- | gROOT->GetColor(7)->SetRGB(0.6, 0.3, 0.6); // Cyan (0, 1, 1)->(0.6, 0.3, 0.6) | + | gROOT->GetColor(7)->SetRGB(0.6, 0.3, 0.6); // Cyan |
</code> | </code> | ||
* 見難い色を変更することができる | * 見難い色を変更することができる | ||
- | * RGBの値(0~255)を255 | + | * RGBの値(0~255)を255で割って規格化(?) |
+ | |||
+ | |||
+ | ---- | ||
+ | ===== カラーバー(TPaletteAxis) ===== | ||
+ | * "colz"オプションで2Dヒストグラムを描いたときの右側のカラーパレット | ||
+ | * Draw後、TPaletteAxisを以下のようにしてとってくることが出来る。 | ||
+ | |||
+ | h2->Draw("colz"); | ||
+ | gPad->Update(); | ||
+ | TPaletteAxis *palette = (TPaletteAxis*)h2->GetListOfFunctions()->FindObject("palette"); | ||
+ | palette->SetY2NDC(0.7); //位置を変えたり、縮めたり | ||
+ | |||
+ | ラベルを消そうとして | ||
+ | palette->SetLabelSize(0); | ||
+ | palette->SetLabelOffset(100); | ||
+ | などやってみたがうまくいかず。 | ||
+ | 代わりに | ||
+ | h2->SetLabelSize(0); | ||
+ | h2->SetLabelOffset(100); | ||
+ | h2->SetTickLength(0,"Z") | ||
+ | などはちゃんと動いた。 | ||
+ | |||
+ | |||
+ | TColor はROOTのv5からv6に変わって、アップデートが多い所のように感じる。 | ||
+ | 用意されているパレットの中身については、TColorのsource (core/base/src/TColor.cxx)の | ||
+ | TColor::SetPaletteの関数の中身を読んでみるとそのパラメータが書いてある。 |