2010-08-12 7 views
5

Wer weiß, ob es möglich ist, die Xtick-Etiketten in Matplotlib zu verpacken? Im Moment habe ich den folgenden Code (eine Art chaotisch - für eine Weile es Hacking) bekam:Ist es möglich, den Text von xticks in matplotlib in python zu verpacken?

def plotResults(request, question_id): 
responses = ResponseOption.objects.filter(question__id=question_id).order_by('order').annotate(response_num=Count('response')) 

counts = [] 
labels = [] 

for response in responses: 
    counts.append(response.response_num) 
    labels.append(smart_truncate('$'+response.text+'$')) 

N = len(labels) 
labels = tuple(labels) 
counts = tuple(counts) 
ind = na.array(range(N))+0.5 
width = .35 
fig = Figure(facecolor='white',edgecolor='white') 
ax = fig.add_subplot(1,1,1) 


rects1 = ax.bar(ind, counts,linewidth=0) 

ax.set_ylabel('$Count$') 

ax.set_title('$Response Historgram$') 
ax.set_xticks(ind+width) 
ax.set_xticklabels(labels) 

print mpl.matplotlib_fname() 

canvas = FigureCanvas(fig) 
response = HttpResponse(content_type='image/png') 

canvas.print_png(response) 

return response 

, dass diese Handlung erzeugt:

alt text

Wie Sie sehen können die Xticks sind entbeint. Irgendwelche Ideen, wie man sie einpackt oder die lesbar macht? Danke noch einmal!

PS: Dies ist Teil eines Django-Projekts. Ich gebe das Plot als PNG-Bild zurück - normalerweise rufe ich sie aus IMG-Tags in verschiedenen Ansichten.

+1

'rotation = 'vertikale'' könnte die Antwort sein: http://StackOverflow.com/Questions/1221108/Barchart-with-vertical-Labels-in-Python-Matplotlib – unutbu

+1

@ ~ unutbu:' Rotation' kann sein jeder Winkel, siehe: http://matplotlib.sourceforge.net/api/axes_api.html#matplotlib.axes.Axes.set_xlabel – Amro

+0

@Amro, danke. 'xticks (rotation = 45)' könnte besser aussehen ... – unutbu

Antwort

9

Vielleicht versuchen:

ax.set_xticklabels(labels, rotation=45) 

Vielen Dank für die rotation can be any degree Hinweis darauf AMRO.

+1

oder in einem Aufruf: 'ax.set_xticklabels (labels, rotation = 45)': http://matplotlib.sourceforge.net/api/axes_api.html#matplotlib .axes.Axes.set_xticklabels – Amro

+0

@Amro, danke nochmal. Wenn Sie eine Antwort posten möchten, würde ich gerne meine löschen. – unutbu

+0

das ist ok, ich denke es war deine Idee :) – Amro

0

Wenn Sie die Beschriftungen manuell umbrechen möchten, können Sie ein '\ n' in den Markennamen einfügen, wodurch die Beschriftung an der Stelle, an der Sie \ 'haben, in zwei Zeilen aufgeteilt wird. Sie können ein Beispiel dieses here sehen.

Es scheint auch eine autowrap function jetzt scheint, dass der Trick schön zu tun scheint. In diesem Beispiel wird plt.text verwendet, es ist jedoch ein Attribut, das Sie auch mit plt.xticks angeben können. (d. h. wrap=True) Ich fand diese Art von Verwirrung der Ausrichtung der Etiketten, also musste ich die horizontalen und vertikalen Ausrichtungen auch zwicken.

Verwandte Themen