al ajustar el xlabel, el parámetro x
asigna la posición en unidades del eje, por lo que 0 es el ori gin y 1 es el borde derecho de la trama. y
se ignora, ya que se espera que sea un valor predeterminado, justo debajo de las marcas de graduación.
Para anular este comportamiento, puede establecer la posición en unidades de eje utilizando Axis
set_label_coords
method. Puede usar otras unidades al proporcionar también una transformación.
Aquí es un ejemplo de esto:
import matplotlib.pyplot as plt
import numpy as np
ax = plt.gca()
ax.set_xticks(np.arange(0,6,1))
label = ax.set_xlabel('Xlabel', fontsize = 9)
ax.xaxis.set_label_coords(1.05, -0.025)
plt.savefig('labelAtEnd.png')
plt.show()
Resultando en:
El valor x (1,05) fue elegido para posicionar la etiqueta fuera del marco de los ejes. El valor y (-0.025) se eligió como la mejor estimación para la posición que deseaba. Con una transformación, es posible que el texto se coloque automáticamente en línea con las etiquetas Tick
.
EDIT:
He aquí un ejemplo ampliado usando una transformación. No es necesariamente más útil usar la última transformación de ticklabel, porque no tiene en cuenta el tamaño del texto y cómo se alinea. Entonces para obtener un efecto deseado, tuve que 1) usar el mismo tamaño de letra para mi etiqueta x, 2) colocar la alineación vertical (va) en 'arriba', y 3) colocar la alineación horizontal en 'izquierda'. La transformación para cada tilde se establece para unidades de datos para x (porque es un xaxis) y unidades de eje para y (0 a 1), pero desplazadas por un relleno fijo (en píxeles) del eje x.
import matplotlib.pyplot as plt
import numpy as np
ax = plt.gca()
ax.set_xticks(np.arange(0,6,1))
ax.set_yticks(np.arange(0,6,1))
label = ax.set_xlabel('xlabel', ha='left', va = 'top',)#fontsize = 9)
# need to draw the figure first to position the tick labels
fig = plt.gcf()
fig.draw(fig.canvas.get_renderer())
# get a tick and will position things next to the last one
ticklab = ax.xaxis.get_ticklabels()[0]
trans = ticklab.get_transform()
ax.xaxis.set_label_coords(5.1, 0, transform=trans)
plt.savefig('labelAtEnd2.png')
plt.show()
Esto se traduce en:
¿Podría dar un ejemplo del uso de una transformación también? –
@Zhenya Agregué un ejemplo, pero resulta que no es trivial. – Yann
muchas gracias! – billyduc