当前位置: 首页 > 知识库问答 >
问题:

将旋转的xtick标签与各自的xticks对齐

穆德海
2023-03-14

检查下图的x轴。如何将标签向左移动一点,使其与各自的刻度对齐?

我正在使用以下方法旋转标签:

ax.set_xticks(xlabels_positions)
ax.set_xticklabels(xlabels, rotation=45)

但是,正如您所看到的,旋转集中在文本标签的中间。这让他们看起来像是右移了。

我试着用这个来代替:

ax.set_xticklabels(xlabels, rotation=45, rotation_mode="anchor")

... 但它没有实现我的愿望。而“锚定”似乎是旋转模式参数所允许的唯一值。

共有3个答案

段干帅
2023-03-14

已接受的ha='right'仍不足以将标签与记号视觉对齐:

  • 如果旋转=45,则添加rotation_mode='锚'
  • 否则添加一个Scaled翻译

如果旋转角度大约是45度,那么设置rotation_mode='锚'是最简单的:

x = xticks = np.arange(10)
xticklabels = (f'xticklabel {tick}' for tick in xticks)

fig, ax = plt.subplots()
ax.bar(x, x - 4.5)
ax.set_xticks(xticks)

# since rotation=45, anchor the rotation to fix label/tick alignment
ax.set_xticklabels(xticklabels, rotation=45, ha='right', rotation_mode='anchor')

但是,对于其他角度,如70度(见左图),这并不适用,在这种情况下,我们需要应用缩放翻译(见右图):

如果旋转角度更极端,或者您只需要更细粒度的控制,则应用ScaledTranslation,如如何在matplotlib中移动勾号标签所述:

...
ax.set_xticklabels(xticklabels, rotation=70, ha='right')

# create offset transform (x=5pt)
from matplotlib.transforms import ScaledTranslation
dx, dy = 5, 0
offset = ScaledTranslation(dx/fig.dpi, dy/fig.dpi, scale_trans=fig.dpi_scale_trans)

# apply offset transform to all xticklabels
for label in ax.xaxis.get_majorticklabels():
    label.set_transform(label.get_transform() + offset)
岑俊明
2023-03-14

旋转标签当然是可能的。请注意,这样做会降低文本的可读性。一种替代方法是使用如下代码替换标签位置:

import numpy as np
n=5

x = np.arange(n)
y = np.sin(np.linspace(-3,3,n))
xlabels = ['Long ticklabel %i' % i for i in range(n)]


fig, ax = plt.subplots()
ax.plot(x,y, 'o-')
ax.set_xticks(x)
labels = ax.set_xticklabels(xlabels)
for i, label in enumerate(labels):
    label.set_y(label.get_position()[1] - (i % 2) * 0.075)

更多的背景和选择,见我博客上的这篇文章

樊杰
2023-03-14

可以设置标签的水平对齐方式,请参见下面的示例。如果设想旋转标签周围有一个矩形框,您希望矩形的哪一侧与滴答点对齐?

根据您的描述,您需要:ha='right'

n=5

x = np.arange(n)
y = np.sin(np.linspace(-3,3,n))
xlabels = ['Ticklabel %i' % i for i in range(n)]

fig, axs = plt.subplots(1,3, figsize=(12,3))

ha = ['right', 'center', 'left']

for n, ax in enumerate(axs):
    ax.plot(x,y, 'o-')
    ax.set_title(ha[n])
    ax.set_xticks(x)
    ax.set_xticklabels(xlabels, rotation=40, ha=ha[n])
 类似资料:
  • 问题内容: 对于matlpotlib来说我还很陌生,我发现刻度线定位器和标签令人困惑,所以请多多包涵。我发誓我已经搜寻了几个小时。 我有一个这样的数据框“框架”(相关列): 其中,工作日名称是索引,而工作日编号是一列。此框架中没有日期时间对象。 我把这个变成了一个数字。 我需要将x轴用作数值,因为我想稍后添加一个散点图,这对于字符串值是不可能的。 这样可以 所以基本上我希望我的xticks是“ d

  • 我正在做一个带有长标签的条形图,我将其旋转了45度,并设置为右对齐。但是,记号标签仍然与记号有一点距离,使绘图看起来很奇怪。如何将所有标签向右移动几个点? 这是我目前的代码: 编辑:请查看stackoverflow中右对齐的子批次。com/a/14854007/1452257为例。如果你愿意,我也可以将代码/图像复制到这篇文章中。

  • Highcharts 柱形图 以下实例演示了标签旋转柱形图。 我们在前面的章节已经了解了 Highcharts 基本配置语法。接下来让我们来看下其他的配置。在 dataLabels 中添加 rotation 属性: 配置 dataLabels : 数据标签 dataLabels 定义图上是否显示数据标签。 文本旋转程度由 rotation 属性决定。我们还可以通过其他属性来定义文本标签的背景,间隔

  • 我试图显示带有旋转x轴标签的图表,但该图表未显示。 此时,我可以看到图像,但在设置xticklabel后,我不再看到图像,只看到对象引用。(我会发布图片,但我没有足够的声誉:() 这里发布了一个类似的问题:在seaborn FactoryPlot中旋转标签文本,但解决方案不起作用。

  • 以下是带有旋转标签的柱形图的示例。 我们已经在Highcharts Configuration Syntax一章中看到了用于绘制图表的配置 。 现在让我们看看其他配置以及我们如何在dataLabels中添加rotation属性。 下面给出了带有旋转标签的柱形图的示例。 dataLabels (dataLabels) dataLabels是一个包装器对象,用于处理图表中的数据标签。 文字旋转度数。

  • 以下是带有旋转标签的柱形图的示例。 我们已经在Highcharts Configuration Syntax一章中看到了用于绘制图表的配置 。 现在让我们看看其他配置以及我们如何在dataLabels中添加rotation属性。 下面给出了带有旋转标签的柱形图的示例。 dataLabels (dataLabels) dataLabels是一个包装器对象,用于处理图表中的数据标签。 文字旋转度数。