I've been trying to wrap text for long labels in my code. I tried the textwrap method suggested earlier here, but my code defines yticklabels through an array imported from a csv using the pyplot.setp()
method. I'm using tight_layout()
for the formatting otherwise.
So the question is - is there a way to wrap the really long y labels to newlines easily?
Here is some sample code that I'd like a fix for:
import numpy as np import matplotlib.pyplot as plt labels=('Really really really really really really long label 1', 'Really really really really really really long label 2', 'Really really really really really really long label 3') values=(30,50,40) fig = plt.figure() ax=fig.add_subplot(111) plt.ylim((0,40)) for i in np.arange(3): plt.barh(15*i, values[i]) plt.yticks(15*np.arange(3)) plt.setp(ax.set_yticklabels(labels)) plt.tight_layout() plt.show()
This plots something like this I'd like the labels to go to newlines after a fixed width. Any ideas?
If you want to wrap the labels manually you can insert a '\n' into the label name, which will break the label into two lines at the point you have the '\n'. You can see an example of this here. There also appears to be an autowrap function now that seems to do the trick nicely.
I have tried using textwrap
on the labels and it works for me.
from textwrap import wrap labels=['Really really really really really really long label 1', 'Really really really really really really long label 2', 'Really really really really really really long label 3'] labels = [ '\n'.join(wrap(l, 20)) for l in labels ]
Inserting this in your code gives us:
If you are looking for a fast way to wrap your labels dynamically, you can simply replace ' '
by '\n'
like this :
wrapped_labels = [ label.replace(' ', '\n') for label in labels ]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With