简体   繁体   中英

Changing tick label line spacing in matplotlib

I have a quite cluttered plot with y-ticklabels that need to be very long. I've resorted into wrapping them into multiline text with textwrap . However that makes the labels overlap (or at least come too close), between categories.

I can't solve it by spacing the ticks, making the graph larger, changing font or making the text smaller. (I've already pushed these limits)

As I see it, I could resolve and make it work if I could adjust the line spacing/height to be less than what the font requests.

So imagine for simplicity's sake the following tick-label desperately needs shorter line distance between lines/line height:

from matplotlib import pyplot as plt
plt.barh(0.75, 10, height=0.5)
plt.ylim(0, 2)
plt.yticks([1], ["A very long label\nbroken into 2 line"])
plt.subplots_adjust(left=0.3)
plt.show()

I've checked plt.tick_params() the rcParams without finding any obvious solution. I'm using latex to format the text, but trying to use \\hspace(0.5em} in the tick label string seemed not to work/only make things worse.

Any suggestion as to how the line spacing can be decreased would be much appreciated.

You can use the linespacing keyword in your plt.yticks line. For example:

plt.yticks([1], ["A very long label\nbroken into 2 line"],linespacing=0.5)

You can play with the exact value of linespacing to fit your needs. Hope that helps.

Here's the original output of your code: 默认行间距

And here it is with a linespacing of 0.5: 在此输入图像描述

Attempt using this:

pylab.rcParams['xtick.major.pad']='???'

Mess around with the ??? value to get something you like. You could also try (sing the OO interface):

fig = plt.figure()
ax = fig.add_subplot(111)
ax.tick_params(axis='both', which='major', labelsize=8)
ax.set_yticks([1], ["A very long label\nbroken into 2 line"], linespacing=0.5)
plt.show()

The labelsize command will change the size of your font.

Use a combination of the above with the rcparams setup.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM