xticks xticklabels ticks set_xticks change python matplotlib plot label

python - xticklabels - xticks matplotlib



¿Cómo puedo rotar xticklabels en matplotlib para que el espaciado entre cada etiqueta xtick sea igual? (2)

¿Cómo puedo rotar xticklabels en matplotlib para que el espaciado entre cada etiqueta xtick sea igual?

Por ejemplo con este código:

import matplotlib.pyplot as plt import numpy as np # Data + parameters fontsize = 20 t = np.arange(0.0, 6.0, 1) xticklabels = [''Full'', ''token emb'', ''char emb'', ''char LSTM'', ''token LSTM'', ''feed forward'',''ANN''] # Plotting fig = plt.figure(1) ax = fig.add_subplot(111) plt.plot(t, t) plt.xticks(range(0, len(t) + 1)) ax.tick_params(axis=''both'', which=''major'', labelsize=fontsize) ax.set_xticklabels(xticklabels, rotation = 45) fig.savefig(''test_rotation.png'', dpi=300, format=''png'', bbox_inches=''tight'')

Yo obtengo:

El espacio entre cada etiqueta xtick es desigual. Por ejemplo, el espaciado entre ''Full'' y ''token emb'' es mucho mayor que el espaciado entre ''feed forward'' y ''ANN''.

Uso Matplotlib 2.0.0 y Python 3.5 de 64 bits en Windows 7 SP1 x64 Ultimate.


Las etiquetas están centradas en la posición de marca de verificación. Sus cajas delimitadoras son desiguales en ancho e incluso pueden superponerse, lo que las hace parecer desigualmente espaciadas.

Como siempre querría que las etiquetas de tic-tac se vinculen con sus marcas, cambiar el espaciado no es realmente una opción.

Sin embargo, es posible que desee alinearlos de modo que la esquina superior derecha sea la referencia para su colocación debajo del tic.

Utilice el argumento de ha horizontalalignment o ha para eso y ajústelo a "right" :

ax.set_xticklabels(xticklabels, rotation = 45, ha="right")

Esto da como resultado la siguiente gráfica:

Una alternativa puede ser mantener las ticklabels centradas horizontalmente, pero también centrarlas verticalmente. Esto conduce a un espaciado igual pero se requiere ajustar aún más su posición vertical con respecto al eje.

ax.set_xticklabels(xticklabels, rotation = 45, va="center", position=(0,-0.28))


Una solución más fácil es agregar plt.xticks(rotation=45 ) a su código. El resultado es así: