检查下图的x轴。如何将标签向左移动一点,使它们与各自的刻度对齐?
我使用以下命令旋转标签:
ax.set_xticks(xlabels_positions)
ax.set_xticklabels(xlabels, rotation=45)
但是,如您所见,旋转的中心是文本标签的中间。这使得它们看起来像是向右移动了。
我试着用这个代替:
ax.set_xticklabels(xlabels, rotation=45, rotation_mode="anchor")
……但它没有实现我的愿望。"anchor"
似乎是rotation_mode
参数唯一允许的值。
6条答案
按热度按时间t5zmwmid1#
您可以设置ticklabels的水平对齐方式,请参见下面的示例。如果您设想旋转标签周围有一个矩形框,您希望矩形的哪一边与刻度点对齐?
根据您的描述,您需要:哈='right'
btxsgosb2#
ha='right'
不足以可视化对齐标签和刻度:rotation=45
,使用bothha='right'
和rotation_mode='anchor'
ScaledTranslation()
rotation_mode='anchor'
如果旋转Angular 约为45°,则将
ha='right'
与rotation_mode='anchor'
组合:或者在matplotlib 3中。5.0+,set ticks and labels at once:
ScaledTranslation()
如果旋转Angular 更极端(e.如果锚定不起作用,或者您只是想要更细粒度的控制,锚定不会很好地工作。相反,apply a linear transform:
093gszye3#
旋转标签当然是可能的。请注意,这样做会降低文本的可读性。一种替代方法是使用如下代码交替标签位置:
有关更多背景信息和备选方案,请参见this post on my blog
igetnqfo4#
一个简单、无循环的替代方法是使用
horizontalalignment
Text属性作为xticks
[1]的关键字参数。在下面的注解行中,我强制xticks
对齐为“right”。(
yticks
默认情况下已经将右边缘与刻度对齐,但对于xticks
,默认情况下似乎是“中心”。)[1]如果您搜索短语“文本属性”,您会发现xticks documentation中描述的内容。
3hvapo4f5#
我显然迟到了,但有一个官方的例子,使用
旋转标签,同时保持它们与刻度正确对齐,这既干净又容易。
参见:https://matplotlib.org/stable/gallery/images_contours_and_fields/image_annotated_heatmap.html
t30tvxxf6#
@tdy的回答近乎完美。我认为让标签看起来漂亮的一个更快的方法是使用以下所有三个设置的组合:
ha='right'
va='top'
rotation_mode='anchor'
这样,就不需要使用
ScaledTranslation
。这似乎对所有旋转Angular 都很有效。