这里有很多“正确”的答案,但我要再补充一个,因为我认为一些细节被遗漏了。OP要求90度旋转,但我将改为45度,因为当你使用一个不是0或90度的角度时,你也应该改变水平对齐;否则你的标签会偏离中心,有点误导(我猜很多来这里的人都想把轴旋转到90度以外的地方)。
最简单/最少的代码
选项1
plt.xticks(rotation=45, ha='right')
如前所述,如果您更愿意采用面向对象的方法,这可能是不可取的。
选项2
另一种快速方法(它适用于日期对象,但似乎适用于任何标签;但我不建议你这么做):
fig.autofmt_xdate(rotation=45)
你通常会得到的图:
FIG = plt.gcf()
图= plt.figure()
图,ax = plt.subplots()
FIG = ax.figure
面向对象/直接处理ax
选项3
如果你有标签列表:
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')
选项3 b
如果你想从当前图中获取标签列表:
# Unfortunately you need to draw your figure first to assign the labels,
# otherwise get_xticklabels() will return empty strings.
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')
选择6
这个选项很简单,但AFAIK你不能这样设置标签水平对齐,所以如果你的角度不是90度,另一个选项可能会更好。
ax.tick_params(axis='x', labelrotation=45)
编辑:
有关于这个确切的“bug”的讨论,但修复还没有发布(截至3.4.0):
https://github.com/matplotlib/matplotlib/issues/13774