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

Posted

技术标签:

【中文标题】是否可以在 python 的 matplotlib 中包装 xticks 的文本?【英文标题】:Is it possible to wrap the text of xticks in matplotlib in python? 【发布时间】:2011-03-28 17:17:19 【问题描述】:

有人知道是否可以将 xtick 标签包装在 matplotlib 中吗?现在我有以下代码(有点乱——已经破解了一段时间):

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

生成这个情节:

如您所见,xticks 已被剔除。关于如何包装它们或使它们可读的任何想法?再次感谢!

PS:这是 Django 项目的一部分。我将绘图作为 png 图像返回——通常从各种视图中的 img 标签调用它们。

【问题讨论】:

rotation = 'vertical' 可能是答案:***.com/questions/1221108/… @~unutbu:rotation可以是任意角度,见:matplotlib.sourceforge.net/api/… @Amro,谢谢。 xticks(rotation=45) 可能看起来更好...... # 使用 matplotlib 包装条形图的条形标签 ***.com/a/70443275/17736138 【参考方案1】:

或许可以试试:

ax.set_xticklabels(labels, rotation=45)

感谢 Amro 指出 rotation can be any degree。

【讨论】:

或一通电话:ax.set_xticklabels(labels, rotation=45):matplotlib.sourceforge.net/api/… @Amro,再次感谢。如果您想发布答案,我很乐意删除我的答案。 没关系,我想这是你的主意 :) 当我执行plt.savefig(os.path.join(sys.argv[1],'image.png')) 时,标签会从图像的页面上消失。为什么是这样?我是否需要subplot而不是直接对主要plt.xticks(args...),rotation=45)进行plt.bar 如果使用 savefig 旋转导致标签脱离图像,请在调用中添加 bbox_inches='tight'【参考方案2】:

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

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

【讨论】:

文本 wrap=True 是我的带有长 ytick 标签的水平条形图的完美解决方案。虽然 OP 似乎要求并接受轮换作为答案,但您对“换行”问题的回答是完美的。谢谢。 你是如何将这个应用到 ytick 标签上的?

以上是关于是否可以在 python 的 matplotlib 中包装 xticks 的文本?的主要内容,如果未能解决你的问题,请参考以下文章

在安卓上使用 python 和 matplotlib

Python使用matplotlib可视化安德鲁斯曲线安德鲁斯曲线可以用来查看分类变量对于数据集是否具有判别性区分性(Andrews Curve)

Python - matplotlib:如何更改 RectangleSelector 属性

Python 和 Matplotlib:在 Jupyter Notebook 中制作交互式 3D 绘图

pip 安装 Python的matplotlib

是否可以使用 matplotlib 将 x 轴设置为仅显示开始日期和结束日期?