首页 > 解决方案 > 如何使用 matplotlib 在子图的 y 轴上截断非常长的刻度标签并在一个图中整齐地拟合图和标签?

问题描述

下面是我的代码。我想截断 y 轴刻度标签。我无法截断用于标签的字段,因为这样数据将不正确地聚合。我需要截断用于标签的字符串。假设每个字符串的前 100 个字符。我将如何以这种方式截断每个子图,以便能够在一个图中整齐地显示所有标签和子图?

fig, ax = plt.subplots(2,2, sharex = True, figsize=(15,10))

a = q3[:10].plot(kind='barh',stacked=True,colormap='Reds',rot=0, legend = None,  ax = ax[0,0])
b = q1[:10].plot(kind='barh',stacked=True,colormap='Reds',rot=0, legend = None,ax = ax[0,1])
c = q4[:10].plot(kind='barh',stacked=True,colormap='Reds',rot=0, legend = None,ax = ax[1,0])
d = q2[:10].plot(kind='barh',stacked=True,colormap='Reds',rot=0, legend = None,ax = ax[1,1])


plt.show()

在此处输入图像描述

标签: pythonpython-3.xmatplotlib

解决方案


我无法截断用于标签的字段,因为这样数据将不正确地聚合。

默认情况下,pandas 使用索引来设置刻度标签。但是,您可以创建另一列截断标签,然后告诉 pandas 使用它来设置 y-tick 标签。

q3.plot(kind='barh', ..., yticks=q3['my_column_with_truncated_strings'])

或者,您可以直接使用 matplotlib:

axes[0,0].set_yticklabels(q3['my_column_with_truncated_strings'])

推荐阅读