Say you want to plot two TH2Ds with on the same pad but different color paletettes?
This is possible, but requires a touch of fancy ROOT-ing. Actually, it's not that much, it just takes a lot of time to figure it out. So here it is.
Fair warning, the order of all the gPad->Modified's etc seems very important to no seg fault.
In include the main (demo.cc) and the Makefile. |
///////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
/////// demo.cxx
////// Nov 2018, Brian Clark
////// Demonstrate how to draw 2 TH2D's with two different color palettes (needs ROOT6)
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//C++
#include <iostream>
//ROOT Includes
#include "TH2D.h"
#include "TCanvas.h"
#include "TStyle.h"
#include "TExec.h"
#include "TColor.h"
#include "TPaletteAxis.h"
#include "TRandom3.h"
using namespace std;
int main(int argc, char **argv)
{
gStyle->SetOptStat(0);
TH2D *h1 = new TH2D("h1","h1",100,-10,10,100,-10,10);
TH2D *h2 = new TH2D("h2","h2",100,-10,10,100,-10,10);
TRandom3 *R = new TRandom3(time(0));
int count=0;
while(count<10000000){
h1->Fill(R->Gaus(-4.,1.),R->Gaus(-4.,1.));
count++;
}
TRandom3 *R2 = new TRandom3(time(0)+100);
count=0;
while(count<10000000){
h2->Fill(R2->Gaus(4.,1.),R2->Gaus(4.,1.));
count++;
}
TCanvas *c = new TCanvas("c","c",1100,850);
h1->Draw("colz");
TExec *ex1 = new TExec("ex1","gStyle->SetPalette(kValentine);");
ex1->Draw();
h1->Draw("colz same");
gPad->SetLogz();
gPad->Modified();
gPad->Update();
TPaletteAxis *palette1 = (TPaletteAxis*)h1->GetListOfFunctions()->FindObject("palette");
palette1->SetX1NDC(0.7);
palette1->SetX2NDC(0.75);
palette1->SetY1NDC(0.1);
palette1->SetY2NDC(0.95);
gPad->SetRightMargin(0.3);
gPad->SetTopMargin(0.05);
h2->Draw("same colz");
TExec *ex2 = new TExec("ex2","gStyle->SetPalette(kCopper);"); //TColor::InvertPalette();
ex2->Draw();
h2->Draw("same colz");
gPad->SetLogz();
gPad->Modified();
gPad->Update();
TPaletteAxis *palette2 = (TPaletteAxis*)h2->GetListOfFunctions()->FindObject("palette");
palette2->SetX1NDC(0.85);
palette2->SetX2NDC(0.90);
palette2->SetY1NDC(0.1);
palette2->SetY2NDC(0.95);
h1->SetTitle("");
h1->GetXaxis()->SetTitle("X-Value");
h1->GetYaxis()->SetTitle("Y-Value");
h1->GetZaxis()->SetTitle("First Histogram Events");
h2->GetZaxis()->SetTitle("Second Histogram Events");
h1->GetYaxis()->SetTitleSize(0.05);
h1->GetXaxis()->SetTitleSize(0.05);
h1->GetYaxis()->SetLabelSize(0.045);
h1->GetXaxis()->SetLabelSize(0.045);
h1->GetZaxis()->SetTitleSize(0.045);
h2->GetZaxis()->SetTitleSize(0.045);
h1->GetZaxis()->SetLabelSize(0.04);
h2->GetZaxis()->SetLabelSize(0.04);
h1->GetYaxis()->SetTitleOffset(1);
h1->GetZaxis()->SetTitleOffset(1);
h2->GetZaxis()->SetTitleOffset(1);
c->SetLogz();
c->SaveAs("test.png");
}
|