Anyone know if it is possible to wrap the xtick labels in matplotlib? Right now I've got the following code (kind of messy -- been hacking at it for a while):
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
That generates this plot:
As you can see the xticks are boned. Any ideas on how to wrap them, or baring that make them readable? Thanks again!
PS: This is part of a Django project. I return the plot as a png image -- normally call them from img tags in various views.
In Python, to wrap or truncate a string at a given width (= number of characters), use the textwrap module of the standard library.
pyplot. xticks. Get or set the current tick locations and labels of the x-axis.
Perhaps try:
ax.set_xticklabels(labels, rotation=45)
Thanks to Amro for pointing out that rotation
can be any degree.
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