Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it possible to wrap the text of xticks in matplotlib in python?

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:

alt text

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.

like image 301
biased_estimator Avatar asked Aug 12 '10 02:08

biased_estimator


People also ask

How do you wrap text in Python?

In Python, to wrap or truncate a string at a given width (= number of characters), use the textwrap module of the standard library.

What does Xticks do in Matplotlib?

pyplot. xticks. Get or set the current tick locations and labels of the x-axis.


1 Answers

Perhaps try:

ax.set_xticklabels(labels, rotation=45)

Thanks to Amro for pointing out that rotation can be any degree.

like image 150
unutbu Avatar answered Sep 24 '22 19:09

unutbu