Dear ROOT experts,
I have just found that the PIxelToY function is not working as I expect it to do.
Let’s say I have a histogram and multiple labels that I want to plot. Once I plot everything, I want the histogram to not overlap with the labels. For this, I get the latex labels NDC coordinate, the maximum of the histogram in USER coordinates, and now I want to compare the values. The result of this is to have:
maxy_histogram < miny_labels
Since we have different coordinates systems, I want to transform the NDC coordinates to USER ones. For this I do like the following:
miny_label_user = ROOT.gPad.PixeltoY(ROOT.gPad.VtoPixel(miny_label_ndc) - int(ROOT.gPad.GetWh() * ROOT.gPad.GetHNDC()))
as following the instructions here.
However, in this minimal example, you can see that the output of miny_label_user
doesn’t make sense at all, being really similar to the original miny_label_ndc
value.
import ROOT
ROOT.gROOT.SetStyle('ATLAS')
# Create the canvas
canvas = ROOT.TCanvas("canvas", "My Canvas")
# Create the histogram
histogram = ROOT.TH1F("histogram", "My Histogram; X Label; Y Label", 50, -5, 5)
# Fill the histogram with some random data
for i in range(1000):
histogram.Fill(ROOT.gRandom.Gaus())
# Draw the histogram
histogram.Draw()
# Set the label properties
label = ROOT.TLatex()
label.SetTextSize(0.04)
label.SetTextColor(ROOT.kBlack)
# Draw the labels
label.DrawLatexNDC(0.2, 0.9, "My Histogram Title")
label.DrawLatexNDC(0.2, 0.85, "X Axis Label")
label.DrawLatexNDC(0.7, 0.85, "Y Axis Label")
miny_label_ndc = 0.85
max_histogram_user = histogram.GetMaximum()
print(f'{miny_label_ndc = }')
print(f'Conversion miny_label_ndc to USER coordinates = {ROOT.gPad.PixeltoY(ROOT.gPad.VtoPixel(miny_label_ndc) - int(ROOT.gPad.GetWh()*ROOT.gPad.GetHNDC()))}')
print(f'{max_histogram_user = }')
# Update the canvas
canvas.Update()
# Save the histogram as a PDF file
canvas.Print("my_histogram.pdf")
The output is:
miny_label_ndc = 0.85
Conversion miny_label_ndc to USER coordinates = 0.8505263157894737
max_histogram_user = 89.0
and by inspecting the canvas, the NDC coordinate should be approximatelly 81.9
How can I obtain the USER value of the coordinates correctly, starting from NDC values?
Thanks a lot for the help,
Cheers,
Francisco
test.py (1.0 KB)
ROOT Version: 6.28