Axis on a ratio plot of histograms

I am trying this example of ratio plot but with:

  1. In pyROOT
  2. Normalized histograms
  3. “histo” plot option

Then I can’t see the new Y axis. Why?

Here is the ready code snippet you can try:

from ROOT import TH1F, TCanvas, TPad, TGaxis

# Example displaying two histograms and their ratio.
# Author: Olivier Couet

h1 = TH1F("h1", "Two gaussian plots and their ratio;x title; h1 and h2 gaussian histograms", 100, -5, 5)
h2 = TH1F("h2", "h2", 100, -5, 5)
h1.FillRandom("gaus")
h2.FillRandom("gaus")


def plotratio(h1, h2):
    # Define two gaussian histograms. Note the X and Y title are defined
    # at booking time using the convention "Hist_title  X_title  Y_title"

    # Define the Canvas
    c = TCanvas("c", "canvas", 800, 800)

    # Upper plot will be in pad1
    pad1 = TPad("pad1", "pad1", 0, 0.3, 1, 1.0)
    pad1.SetBottomMargin(0) # Upper and lower plot are 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.Sumw2()
    h1.Scale(1. / h1.Integral())
    h1.Draw("histo")               # Draw h1

    h2.Sumw2()
    h2.Scale(1. / h2.Integral())
    h2.Draw("histo same")         # Draw h2 on top of h1

    # Do not draw the Y axis label on the upper plot and redraw a small
    # axis instead, in order to avoid the first label (0) to be clipped.
    h1.GetYaxis().SetLabelSize(0.)
    axis = TGaxis(-5, 0.1, -5, 1., 0.1, 1., 510, "")
    axis.SetLabelFont(43) # Absolute font size in pixel (precision 3)
    axis.SetLabelSize(15)
    axis.Draw()

    # lower plot will be in pad
    c.cd()          # Go back to the main canvas before defining pad2
    pad2 = 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
    h3 = h1.Clone("h3")
    h3.SetLineColor(1)
    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(5)
    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(2)
    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(2.5)
    h3.GetXaxis().SetLabelFont(43) # Absolute font size in pixel (precision 3)
    h3.GetXaxis().SetLabelSize(15)

    input("wait")


plotratio(h1, h2)

ROOT Version: 6.18
Platform: SL7
Compiler: gcc 4.8.5

You are referring to a very old version of the documentation Have a look to the ratio plot examples in the most recent one.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.