Rotating axis labels


I want to rotate my axis labels to an arbitrary angle. I first fill the axis label with test via

hist->GetXaxis()->SetBinLabel(2,"m_{ES}>5.27 GeV")

and the labels are too long to fit horizontally. I did a search in RootTalk but could not find any relevant discussions. Ironically, I googled “rotating axis labels” and this old (2000) posting popped up. Is it possible to do with ROOT v3.10?


Re: [ROOT] rotating axis labels
From: Damir Buskulic ([](
Date: Wed Jul 26 2000 - 18:01:30 MEST

    * Next message: Ralph Mueller-Pfefferkorn: "Re: [ROOT] rotating axis labels"
    * Previous message: Valeri Fine (Faine): "Re: [ROOT] Windows 2000"
    * In reply to: Ralph Mueller-Pfefferkorn: "[ROOT] rotating axis labels"
    * Next in thread: Ralph Mueller-Pfefferkorn: "Re: [ROOT] rotating axis labels"
    * Reply: Ralph Mueller-Pfefferkorn: "Re: [ROOT] rotating axis labels"
    * Messages sorted by: [ date ] [ thread ] [ subject ] [ author ] 

Hi Ralph,

For the moment, I think it is impossible to do. Can't you choose a time
format that fits horizontally ? What is the format ?


Ralph Mueller-Pfefferkorn wrote:
> Hi Rene,
> how can I rotate the labels of an axis (TH*/TGraph) ?
> I want to plot something versus date. As the date is a long label I would
> like to rotate it that the labels are vertical to the axis. But I could
> not find out how to do that.
> Could you help me, please ?
> Greetings, Ralph
> --
> Ralph Mueller-Pfefferkorn        email: [](
> Institut f. Kern- und Teilchenphysik, TU Dresden, 01062 Dresden, Germany
> Office ASB E25       Phone: +49-351-463-2957       Fax: +49-351-463-3114
>    __o             o__      o__      o__      o__      o__      o__
>    \<,_           _.>/ _   _.>/ _   _.>/ _   _.>/ _   _.>/ _   _.>/ _
> (_)/ (_)_________(_) \(_) (_) \(_) (_) \(_) (_) \(_) (_) \(_) (_) \(_)__

| Damir Buskulic                  | Universite de Savoie/LAPP       |
|                                 | Chemin de Bellevue, B.P. 110    |
| Tel : +33 (0)450091600          | F-74941 Annecy-le-Vieux Cedex   |
| e-mail: [](  | FRANCE                          |

see tutorials labels1.C or labels2.C
see also … belsOption


Is there an update to this? I found what I think were these, but they didn’t really explain it. I also found the method SetTextAngle, but I’m not sure what to call it from.
So, is it possible to get rotating labels for an axis?

Do you have a small example showing what you are doing ?
The existing examples are:

1 Like

Consider this python example of a time dependent bin size. The axis labels look ugly, the dates are too close together. I would like them to go at an angle, like the ones in the examples you provided, but I want the axis to do this automatically, since the plot will be updates as time progresses. I want to use the axis’ treatment of time, so I would like to use the axis rather than a separate drawable object.

#!/usr/bin/env python
import ROOT
def main():
    from array import array
    x = [1461168044L, 1461353937L, 1461583342L, 1461583828L, 1461590925L, 1461592425L, 1461595103L, 1461681830L, 1462790854L, 1463833176L]
    Hist = ROOT.TH1D("hist", "hist",len(x)-1, array("d",x))
    y = [50,60,100,75,80,65,90,70,80,67]
    for i in range(0,10):

if __name__ == "__main__":

This is done automatically. When the label are too long they rotate. Look at the example, there is no option asking for rotation .

That doesn’t sound right. I changed my example by increasing the label sizes (Hist.GetXaxis().SetLabelSize(0.07):wink: but no automated rotation took place, they just uglily overlap. I made an example here:

Sorry, I thought you add alpha numeric labels. lE automatic rotation is for alpha numeric labels. with time label you can use split line:


Do you think this #splitline command could be automatically used in case of overlaps?

Not right now. This will require development. You need to put it yourself when you define the time format

Ok. A JIRA request has been opened in order to keep this feature in mind :smiley:

I see. Thx