Ok, what’s wrong with that plot (except the not very nice Y axis) ?
I was trying to understand what is that white area filling the gap between the pads and possibly remove it or make it transparent.
As I said, the frame draw puts borders, but I don’t see a way to access it.
Maybe I wasn’t clear. The point is that I do want a gap between the pads, but without clipped labels in the y-axes. I see that TRatioPlot
does the trick without clipping the numbers in the y-axes, so I was trying to achieve the same using the old recipe.
If I remove the TAxis
in the ratioplotOld.C
I see that the numbers are clipped, which is expected because the pads are one next to another.
I tried to add a gap between the pads, i.e., pad1 with y=[0.3,1.0] and pad2 with y=[0,0.2], but no margin is left at the top/bottom of the pads to accommodate the first/last y-axis labels.
It could be that the top/bottom margins are set to zero, so I tried to increase it in canv->Divide(...)
, but no effect is seen.
I’m trying to understand what happens in this area between the pads and why TRatioPlot
doesn’t have such effect.
Cheers, Gustavo
void ratioplotOldGap( ) {
// Define two gaussian histograms. Note the X and Y title are defined
// at booking time using the convention "Hist_title ; X_title ; Y_title"
TH1F *h1 = new TH1F("h1", "Two gaussian plots and their ratio;x title; h1 and h2 gaussian histograms", 100, -5, 5);
TH1F *h2 = new TH1F("h2", "h2", 100, -5, 5);
h1->FillRandom("gaus");
h2->FillRandom("gaus");
// Define the Canvas
TCanvas *c = new TCanvas("c", "canvas", 800, 800);
// Upper plot will be in pad1
TPad *pad1 = new TPad("pad1", "pad1", 0, 0.3, 1, 1.0);
pad1->SetBottomMargin(0.03); // Upper and lower plot are not joined
pad1->SetGridx(); // Vertical grid
pad1->Draw(); // Draw the upper pad: pad1
pad1->cd(); // pad1 becomes the current pad
h1->SetStats(0); // No statistics on upper plot
h1->Draw(); // Draw h1
h2->Draw("same"); // Draw h2 on top of h1
TAxis *axisy = h1->GetYaxis();
axisy->SetLabelFont(43); // Absolute font size in pixel (precision 3)
axisy->SetLabelSize(15);
TAxis *axisx = h1->GetXaxis();
axisx->SetLabelSize(0.);
// lower plot will be in pad
c->cd(); // Go back to the main canvas before defining pad2
TPad *pad2 = new TPad("pad2", "pad2", 0, 0.05, 1, 0.3);
pad2->SetTopMargin(0);
pad2->SetBottomMargin(0.2);
pad2->SetGridx(); // vertical grid
pad2->Draw();
pad2->cd(); // pad2 becomes the current pad
// Define the ratio plot
TH1F *h3 = (TH1F*)h1->Clone("h3");
h3->SetLineColor(kBlack);
h3->SetMinimum(0.8); // Define Y ..
h3->SetMaximum(1.35); // .. range
h3->Sumw2();
h3->SetStats(0); // No statistics on lower plot
h3->Divide(h2);
h3->SetMarkerStyle(21);
h3->Draw("ep"); // Draw the ratio plot
// h1 settings
h1->SetLineColor(kBlue+1);
h1->SetLineWidth(2);
// Y axis h1 plot settings
h1->GetYaxis()->SetTitleSize(20);
h1->GetYaxis()->SetTitleFont(43);
h1->GetYaxis()->SetTitleOffset(1.55);
// h2 settings
h2->SetLineColor(kRed);
h2->SetLineWidth(2);
// Ratio plot (h3) settings
h3->SetTitle(""); // Remove the ratio title
// Y axis ratio plot settings
h3->GetYaxis()->SetTitle("ratio h1/h2 ");
h3->GetYaxis()->SetNdivisions(505);
h3->GetYaxis()->SetTitleSize(20);
h3->GetYaxis()->SetTitleFont(43);
h3->GetYaxis()->SetTitleOffset(1.55);
h3->GetYaxis()->SetLabelFont(43); // Absolute font size in pixel (precision 3)
h3->GetYaxis()->SetLabelSize(15);
// X axis ratio plot settings
h3->GetXaxis()->SetTitleSize(20);
h3->GetXaxis()->SetTitleFont(43);
h3->GetXaxis()->SetTitleOffset(1);
h3->GetXaxis()->SetLabelFont(43); // Absolute font size in pixel (precision 3)
h3->GetXaxis()->SetLabelSize(15);
}
Nice, thanks a lot.