这里有很多“正确”的答案,但我想再添加一个,因为我认为一些细节被省略了。虽然OP要求90度旋转,但我将其改为45度,因为当您使用非零或90度的角度时,您应该同时更改水平对齐方式;否则,您的标签将偏离中心,有点误导(我猜很多人来到这里都想将轴旋转到其他角度而不是90)。
最简单/代码最少
选项1
plt.xticks(rotation=45, ha='right')
如前所述,如果您更喜欢采用面向对象的方法,则可能不希望这样做。
选项2
另一种快速的方法(它旨在处理日期对象,但似乎适用于任何标签;虽然不建议这样做):
fig.autofmt_xdate(rotation=45)
fig
通常可以通过以下方式获取:
fig = plt.gcf()
fig = plt.figure()
fig, ax = plt.subplots()
fig = ax.figure
面向对象 / 直接处理ax
选项3a
如果您有标签列表:
labels = ['One', 'Two', 'Three']
ax.set_xticks([1, 2, 3])
ax.set_xticklabels(labels, rotation=45, ha='right')
在Matplotlib的后续版本(3.5+)中,您只需使用set_xticks
即可:
ax.set_xticks([1, 2, 3], labels, rotation=45, ha='right')
选项3b
如果您想从当前图获取标签列表:
plt.draw()
ax.set_xticks(ax.get_xticks())
ax.set_xticklabels(ax.get_xticklabels(), rotation=45, ha='right')
如上所述,在较新的Matplotlib版本(3.5+)中,你只需使用set_xticks
即可:
ax.set_xticks(ax.get_xticks(), ax.get_xticklabels(), rotation=45, ha='right')
选项4
与上述类似,但手动循环。
for label in ax.get_xticklabels():
label.set_rotation(45)
label.set_ha('right')
选项 5
在这里我们仍然使用 pyplot
(作为plt
),但它是面向对象的,因为我们正在更改特定ax
对象的属性。
plt.setp(ax.get_xticklabels(), rotation=45, ha='right')
选项六
这个选项很简单,但据我所知,你无法通过这种方式设置标签的水平对齐方式,如果你的角度不是90度,那么另一个选项可能更好。
ax.tick_params(axis='x', labelrotation=45)
编辑:
关于这个“bug”的讨论已经出现了,但尚未发布修复版本(截至3.4.0
):
https://github.com/matplotlib/matplotlib/issues/13774。
plt.setp
将自动针对“当前”Axes进行操作,无论它是什么。你给它ax.get_xticklabels()
作为参数,但根据你最后处理的Axes是ax2
还是其他什么,它可以应用于不同的Axes上。当有多个Axes时,人们必须避免使用plt.
的方法。 - Guimoute