¿Cómo puedo rotar xticklabels en matplotlib para que el espacio entre cada xticklabel sea igual?

¿Cómo puedo rotar xticklabels en matplotlib para que el espacio entre cada xticklabel 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:

introduzca la descripción de la imagen aquí

El espacio entre cada xticklabel es desigual. Por ejemplo, el espacio entre ‘Full’ y ‘token emb’ es mucho mayor que el espacio entre ‘feed forward’ y ‘ANN’.

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

Las tags se centran en la posición de marca de verificación. Sus cuadros delimitadores tienen un ancho desigual y pueden incluso superponerse, lo que hace que se vean desigualmente espaciados.

introduzca la descripción de la imagen aquí

Como siempre querrá que las marcas de verificación se vinculen con sus marcas de verificación, cambiar el espacio no es realmente una opción.

Sin embargo, es posible que desee alinearlos, ya que la esquina superior derecha es la referencia para su posicionamiento debajo de la marca.

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

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

Esto da lugar a la siguiente ttwig:

introduzca la descripción de la imagen aquí

Una alternativa puede ser mantener las marcas de verificación centradas horizontalmente, pero también centrarlas verticalmente. Esto conduce a un espaciado igual pero se requiere para 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)) 

introduzca la descripción de la imagen aquí