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>
に詰めてあげれば良いだけです。
使用するときは適宜、SetLineColor
やSetMarkerColor
に登録してあげれば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++;
}
}