matplotlibと同じ色を使う

ちょっとした遊びとして、Matplotlibの配色設定をROOTで再現してみます。 以下のコードで色の設定を行います。

std::vector<Int_t> GetMatplotlibColors()
{
  
  std::vector<Int_t> colors;
  
  colors.push_back( TColor::GetColor("#1F77B4") );
  colors.push_back( TColor::GetColor("#FF7F0E") );
  colors.push_back( TColor::GetColor("#2CA02C") );
  colors.push_back( TColor::GetColor("#D62728") );
  colors.push_back( TColor::GetColor("#9467BD") );
  colors.push_back( TColor::GetColor("#8C564B") );
  colors.push_back( TColor::GetColor("#E377C2") );
  colors.push_back( TColor::GetColor("#7F7F7F") );
  colors.push_back( TColor::GetColor("#BCBD22") );
  colors.push_back( TColor::GetColor("#17BECF") );
  
  return colors;
  
} 

あとはこの関数を読んでvector<Int_t>に詰めてあげれば良いだけです。 使用するときは適宜、SetLineColorSetMarkerColorに登録してあげればOK。

以下にサンプルコードの置いておきます。 実行すると以下の図が出てきます。

std::vector<Int_t> GetMatplotlibColors()
{
  
  std::vector<Int_t> colors;
  
  colors.push_back( TColor::GetColor("#1F77B4") );
  colors.push_back( TColor::GetColor("#FF7F0E") );
  colors.push_back( TColor::GetColor("#2CA02C") );
  colors.push_back( TColor::GetColor("#D62728") );
  colors.push_back( TColor::GetColor("#9467BD") );
  colors.push_back( TColor::GetColor("#8C564B") );
  colors.push_back( TColor::GetColor("#E377C2") );
  colors.push_back( TColor::GetColor("#7F7F7F") );
  colors.push_back( TColor::GetColor("#BCBD22") );
  colors.push_back( TColor::GetColor("#17BECF") );
  
  return colors;
  
}

void matplot(){

  int num = 0;
  int imax = 9;
  int xmax = 20; 

  std::vector<Int_t> colors = GetMatplotlibColors();

  TCatCmdZone::Instance()->Run(1,1,0.01,0.01);
  
  for (int i = 0; i <= imax; i++) {

    TF1* func = new TF1(Form("J_%d(x)",i), Form("ROOT::Math::sph_bessel(%d,x)",i),0,xmax);
    func->SetTitle("ROOT::Math::sph_bessel");
    func->SetLineColor(colors.at(num));
    func->GetYaxis()->SetRangeUser(-0.5,1.5);
    func->GetXaxis()->SetRangeUser(0,xmax);
    
    if(num==0){
  
      func->Draw();
    
    }else{
    
      func->Draw("same");
    
    }   
    
    num++;
  
  }

}

fig fig