victorhooi
Estoy usando Matplotlib para trazar un histograma. Usando los consejos de mi pregunta anterior: Matplotlib: etiquete cada contenedor, tengo más o menos resueltos los problemas.
Hay un problema final, anteriormente, la etiqueta del eje x (“Tiempo (en milisegundos)”) se representaba debajo de las marcas del eje x (0.00, 0.04, 0.08, 0.12, etc.)
Usando el consejo de Joe Kingston (ver la pregunta anterior), intenté usar:
ax.tick_params(axis="x", pad=30)
Sin embargo, esto mueve las marcas del eje x (0,00, 0,04, 0,08, 0,12, etc.), así como la etiqueta del eje x (“Tiempo (en milisegundos)”):
¿Hay alguna forma de mover solo la etiqueta del eje x debajo de las tres filas de figuras?
NB: es posible que deba abrir los PNG a continuación directamente: haga clic con el botón derecho en la imagen, luego Ver imagen (en FF) o Abrir imagen en una nueva pestaña (Chrome). El cambio de tamaño de la imagen realizado por SO las ha vuelto casi ilegibles.
use el parámetro del panel de etiquetas:
pl.xlabel("...", labelpad=20)
o configurarlo después de:
ax.xaxis.labelpad = 20
-
si uso esto y guardo la figura, la figura se recorta y ya no veo la etiqueta
– El Hocko
13 de enero de 2021 a las 14:28
Matias123
Si la variable ax.xaxis._autolabelpos = True, matplotlib establece la posición de la etiqueta en la función _update_label_position en axis.py según (algunos extractos):
bboxes, bboxes2 = self._get_tick_bboxes(ticks_to_draw, renderer)
bbox = mtransforms.Bbox.union(bboxes)
bottom = bbox.y0
x, y = self.label.get_position()
self.label.set_position((x, bottom - self.labelpad * self.figure.dpi / 72.0))
Puede establecer la posición de la etiqueta independientemente de las marcas usando:
ax.xaxis.set_label_coords(x0, y0)
que establece _autolabelpos en False o como se mencionó anteriormente cambiando el parámetro labelpad.
-
Para la posteridad, matplotlib ahora tiene
.set_label_coords
que da un nivel similar de control– la mayoría de los cuadrados
19 oct 2022 a las 22:19
En lugar de rellenar manualmente, intente asignar alineación vertical (va=
):
ax.set_xlabel("x label", va="top");
Si modifica el relleno de la etiqueta manualmente como en la respuesta de @ HYRY, a veces, cuando guarda la figura, la etiqueta se recorta. Para incluir la etiqueta, establezca bbox_inches="tight"
cuando usted llama savefig()
. Por ejemplo:
plt.plot(range(10))
plt.xlabel("x label", labelpad=30);
plt.savefig('img.png', bbox_inches="tight");
Con la API OOP, lo mismo sería:
fig, ax = plt.subplots()
ax.plot(range(10))
ax.set_xlabel("x label", labelpad=30);
fig.savefig('img.png', bbox_inches="tight");