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

目次

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

カラーテーブル (TColor)

 TCanvas *c = new TCanvas("c","Fill Area colors",0,0,500,200);
 c.DrawColorTable();

カラーホイール

 TColorWheel *w = new TColorWheel();
 w->Draw();
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)


Line Style (TAttLine)

線種

線幅


Marker Style (TAttMarker)

Marker style

 TMarker marker;
 marker.DisplayMarkerTypes();

Marker size



その他

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.)

  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


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

 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

カラーバー(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の関数の中身を読んでみるとそのパラメータが書いてある。