ROOTのColor Paletteはどれを使うのがよいのか

ROOTで二次元のヒストグラムを表示するときに、どのようなPaletteを使うのか悩んだのでメモを残しておく。

二次元の表示の際にはTH1::Draw("colz")で表示するが、このときの色はgStyle->SetPalette(Int_t palette)で設定できる。昔は自分で設定していた気がするが今のデフォルトはpalette=1。マニュアルを見ているといつの間にかたくさんのPaletteが用意されているので、良さそうなものを探すことにした。

https://root.cern.ch/root/html/TColor.html#TColor:SetPalette

九大の織田さんがメモを残していたので、図を表示するスクリプトはほとんどそのまま利用させてもらうことにする。

http://epp.phys.kyushu-u.ac.jp/~oda/pukiwiki/index.php?SetPalette

Z方向がLogかLinearかで印象が違うので、両方作ってみた。

  

さて、問題はこれが白黒印刷になった場合の見栄えである。ある論文誌ではROOTのデフォルトのカラーパレットは白黒印刷にした場合にわかりにくいのでダメ、と編集者に言われた人がいるらしい。誰が言っていたのか、どの雑誌かは忘れた。というわけで、上の図を白黒にした場合にどう見えるかをやってみた。

白黒にすると、確かにデフォルトのカラーパレットは問題あると言われても仕方ないのかな、と思った。比較的よく見かけるのはSetPalette(51)で、確かに無難だと思う。珍しいのはSetPalette(56)で、ほとんどのカラーパレットは濃い色から薄くなるが、これだけは薄い色から濃い色になる。SetPalette(53)のInvertとあるが、Invertが用意されていたのはこれだけだった。

最後に上の図を作るスクリプトを載せておく。

#include "TCanvas.h"
#include "TPad.h"
#include "TStyle.h"
#include "TH1.h"
#include "TH2.h"
#include "TRandom.h"
#include "TString.h"

void palette()
{
  gStyle->SetOptStat(0);
  gStyle->SetPadLeftMargin(0.05);
  gStyle->SetPadRightMargin(0.15);
  TH2D *h = new TH2D("h", "h", 100, -5., 5., 100, -5., 5.);
  for(unsigned int i=0; i<10000000; i++){
    h->Fill(gRandom->Gaus(0., 1.), gRandom->Gaus(0., 1.));
  }
  TCanvas *c1 = new TCanvas("c1", "c", 1000,0,1200, 900+24);
  c1->Divide(4, 3);

  Int_t col[12] = {1,51,52,53,56,81,93,99,100,103,106,110};
  TH2D *hh[12];
  
  for(int i=0;i<12;i++){
    c1->cd(i+1);
    gPad->SetLogz(1);
    gStyle->SetPalette(col[i]);
    hh[i] = (TH2D*)h->Clone();
    if(i==0) hh[i]->SetTitle(Form("Default"));
    else     hh[i]->SetTitle(Form("SetPalette(%d)",col[i]));
    hh[i]->Draw("colz");
    gPad->Update();
  }
  c1->SaveAs("palette_log.png");
}