100

I'm creating very simple charts with matplotlib / pylab Python module. The letter "y" that labels the Y axis is on its side. You would expect this if the label was longer, such as a word, so as not to extend the outside of the graph to the left too much. But for a one letter label, this doesn't make sense, the label should be upright. My searches have come up blank. How can I print the "y" horizontally?

agamesh
  • 549
  • 1
  • 10
  • 26
Karl D
  • 1,125
  • 2
  • 7
  • 5

2 Answers2

138

It is very simple. After plotting the label, you can simply change the rotation:

import matplotlib.pyplot as plt

plt.ion()
plt.plot([1, 2, 3])

plt.ylabel("y", rotation=0)
# or
# h = plt.ylabel("y")
# h.set_rotation(0)

plt.draw()
Nico Schlömer
  • 46,467
  • 24
  • 178
  • 218
Jens Munk
  • 4,378
  • 1
  • 22
  • 37
107

Expanding on the accepted answer, when we work with a particular axes object ax:

ax.set_ylabel('abc', rotation=0, fontsize=20, labelpad=20)

Note that often the labelpad will need to be adjusted manually too — otherwise the "abc" will intrude onto the plot.

From brief experiments I'm guessing that labelpad is the offset between the bounding box of the tick labels and the y-label's centre. (So, not quite the padding the name implies — it would have been more intuitive if this was the gap to the label's bounding box instead.)

Evgeni Sergeev
  • 20,806
  • 16
  • 98
  • 121
  • 48
    for better clarity you might consider `rotation='horizontal'`. Also, instead of choosing an arbitrary `labelpad` (and then needing to adjust based on results), you can add the argument `ha='right'`, where `ha` is a convenient abbreviation for the `horizontalalignment` keyword. – NauticalMile Mar 14 '17 at 16:02
  • 8
    And `va="center"` for `verticalalignment`. – jds May 08 '20 at 14:47
  • How to set the orientation without changing existing labels? This is required when the labels have been set by say an external module `librosa.display.specshow()`. – mins Apr 02 '21 at 21:06