2013-04-01 7 views
15

Próbuję zawijać tekst dla długich etykiet w moim kodzie. Próbowałem wcześniej zasugerować metodę textwrap here, ale mój kod definiuje yticklabels poprzez tablicę importowaną z pliku CSV, używając metody pyplot.setp(). Używam tight_layout() do formatowania w przeciwnym razie.Zawijanie długich etykiet w matplotlib w ciasny układ przy użyciu setp

Pytanie brzmi: czy istnieje sposób na łatwe zakodowanie naprawdę długich etykiet?

Oto przykładowy kod, który chciałabym poprawkę:

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() 

Ten działek coś takiego enter image description here chciałbym etykiety, aby przejść do nowej linii po stałej szerokości. Jakieś pomysły?

Odpowiedz

22

Próbowałem używać textwrap na etykietach i to działa dla mnie.

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 ] 

Wkładanie to w kodzie daje nam:

Wrapped labels

+0

super naprawić! Dzięki! – chinmayn

Powiązane problemy