Deprecated: Array and string offset access syntax with curly braces is deprecated in /mnt/hep_web/hep_web/member/n-kota/dokuwiki/inc/init.php on line 542
ja:root:color [GiriWiki]

ユーザ用ツール

サイト用ツール


ja:root:color

カラー・スタイル・マーカー

カラーテーブル (TColor)

 TCanvas *c = new TCanvas("c","Fill Area colors",0,0,500,200);
 c.DrawColorTable();
  • 使い方は単に SetFillColor(2) のように、番号で色を指定すればよい。

カラーホイール

 TColorWheel *w = new TColorWheel();
 w->Draw();
  • 色の指定の時に、SetFillColor(kRed) , SetFillColor(kYellow-10) , SetLineColor(kMagenta+2) のように色名+数字で指定する
  • 実態はRTypes.hに記されていて、
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 };

のように各key wardが数字に対応している。


Fill Style (TAttFill)

  • 0 : 塗りつぶしなし
  • 1001 : べた塗り
  • 3000+pattern number(1~25 , 100~999) :パターン色々,100~999は2種類の平行線が作るパターン
    • 100~999については、pattern number = ijk (FillStyle = 3ijk)で3変数が対応して以下のルールに従ってパターンが決まる
      • i (1~9) : ハッチ(陰影、ケバ)の間隔。 1 = 1/2mm , 9 = 6mm に対応
      • j (0~9) : パターンの角度。0=0°,1=10°,2=20°,3=30°,4=45°,5=書かない,6=60°,7=70°,8=80°,9=90°。時計回り
      • k (0~9) : パターンの角度。0=180°,1=170°,2=160°,3=150°,4=135°,5=書かない,6=120°,7=110°,8=100°,9=90°。反時計回り
  • 4000番台も色々あるらしい
  • 使い方は SetFillStyle(3001) のように番号で指定する。

Line Style (TAttLine)

線種

  • 使い方は gStyle->SetLineStyle(2) など

線幅

  • 使い方は gStyle->SetLineWidth(2) ,hist->SetLineWidth(3) など

Marker Style (TAttMarker)

Marker style

 TMarker marker;
 marker.DisplayMarkerTypes();
  • 9~19 (8も) は scalable dot と説明されているが、違いが分からん。。
  • 使い方は単に gStyle->SetMarkerStyle(3) のように番号で指定。
  • 7,16 は大きさが可変でない分処理が速いらしい。SetMarkerSize は使えない。

Marker size

  • 左上がデフォルトのサイズ = 1 (8 x 8ピクセル)。 
  • 使い方は gStyle->SetMarkerSize(7) など


その他

CreateGradientColorTable

TColor::CreateGradientColorTable(UInt_t Number, Double_t* Stops, Double_t* Red, Double_t* Green, Double_t* Blue, UInt_t NColors, Float_t alpha = 1.)
  • グラデーションを作る関数
  • 第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 が入る

  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 をずらしている

SetPalette

  • 上と同じ2Dヒストを gStyle->SetPalette(1) (上)と gStyle->SetPalette(50) (下)で書いてみた。

  • 55 と 53 も使いやすそう

デフォルトの色を変更する

 gROOT->GetColor(3)->SetRGB(0., 0.7, 0.);   // Green
 gROOT->GetColor(5)->SetRGB(1., 0.5, 0.);   // Yellow
 gROOT->GetColor(7)->SetRGB(0.6, 0.3, 0.6); // Cyan
  • 見難い色を変更することができる
  • 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の関数の中身を読んでみるとそのパラメータが書いてある。

ja/root/color.txt · 最終更新: 2018/08/30 05:24 by kota