是否可以在python中将xticks的文本包装在matplotlib中?

bia*_*tor 5 python django matlab matplotlib

有人知道是否可以在matplotlib中包装xtick标签?现在我已经得到了以下代码(有点乱 - 已经黑了一段时间了):

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
Run Code Online (Sandbox Code Playgroud)

这会产生这样的情节:

替代文字

你可以看到xticks是骨头.关于如何包装它们的任何想法,或使它们可读的baring?再次感谢!

PS:这是Django项目的一部分.我将绘图作为png图像返回 - 通常在各种视图中从i​​mg标签中调用它们.

unu*_*tbu 9

也许试试:

ax.set_xticklabels(labels, rotation=45)
Run Code Online (Sandbox Code Playgroud)

感谢Amro指出rotation可以在任何程度上.


Ben*_*Ben 6

如果您想手动包装标签,您可以在标签名称中插入一个 '\n',这将在您拥有 '\n' 的位置将标签分成两行。你可以在这里看到一个例子。

现在似乎还有一个autowrap 功能,它似乎可以很好地解决这个问题。此示例使用 plt.text,但您也可以使用 plt.xticks 指定它的属性。(即wrap=True)我发现这种标签的对齐方式很混乱,所以我还需要调整水平和垂直对齐方式。