Muitas respostas "corretas" aqui, mas adicionarei mais uma, pois acho que alguns detalhes são deixados de fora de várias. O OP pediu uma rotação de 90 graus, mas vou mudar para 45 graus, porque quando você usa um ângulo que não é zero ou 90, deve alterar também o alinhamento horizontal; caso contrário, seus rótulos serão descentralizados e um pouco enganadores (e acho que muitas pessoas que vêm aqui querem girar os eixos para algo diferente de 90).
Código mais fácil / menos
Opção 1
plt.xticks(rotation=45, ha='right')
Como mencionado anteriormente, isso pode não ser desejável se você preferir a abordagem orientada a objetos.
opção 2
Outra maneira rápida (destina-se a objetos de data, mas parece funcionar em qualquer rótulo; duvide que isso seja recomendado):
fig.autofmt_xdate(rotation=45)
fig
você normalmente obteria de:
fig = plt.figure()
fig, ax = plt.subplots()
fig = ax.figure
Orientado a objeto / Lidando diretamente com ax
Opção 3a
Se você tiver a lista de etiquetas:
labels = ['One', 'Two', 'Three']
ax.set_xticklabels(labels, rotation=45, ha='right')
Opção 3b
Se você deseja obter a lista de etiquetas do gráfico atual:
# Unfortunately you need to draw your figure first to assign the labels,
# otherwise get_xticklabels() will return empty strings.
plt.draw()
ax.set_xticklabels(ax.get_xticklabels(), rotation=45, ha='right')
Opção 4
Semelhante ao anterior, mas alterna manualmente.
for label in ax.get_xticklabels():
label.set_rotation(45)
label.set_ha('right')
Opção 5
Ainda usamos pyplot
(as plt
) aqui, mas é orientado a objetos, porque estamos alterando a propriedade de um ax
objeto específico .
plt.setp(ax.get_xticklabels(), rotation=45, ha='right')
Opção 6
Essa opção é simples, mas no AFAIK você não pode definir o alinhamento horizontal da etiqueta dessa maneira, assim outra opção pode ser melhor se o seu ângulo não for 90.
ax.tick_params(axis='x', labelrotation=45)
Editar:
há uma discussão sobre esse "bug" exato e uma correção está potencialmente prevista para v3.2.0
:
https://github.com/matplotlib/matplotlib/issues/13774
ha
(Alinhar horizontal)