Actualizar:
Esta característica ahora es parte del paquete proplot matplotlib que lancé recientemente en pypi. Por defecto, cuando crea figuras, las etiquetas se "comparten" entre los ejes.
Respuesta original:
Descubrí un método más robusto:
Si conoce los bottom
y top
kwargs que entraron en una GridSpec
inicialización, o conoce las posiciones de los bordes de sus ejes en Figure
coordenadas , también puede especificar la posición de la etiqueta en Figure
coordenadas con un poco de magia de "transformación". Por ejemplo:
import matplotlib.transforms as mtransforms
bottom, top = .1, .9
f, a = plt.subplots(nrows=2, ncols=1, bottom=bottom, top=top)
avepos = (bottom+top)/2
a[0].yaxis.label.set_transform(mtransforms.blended_transform_factory(
mtransforms.IdentityTransform(), f.transFigure # specify x, y transform
)) # changed from default blend (IdentityTransform(), a[0].transAxes)
a[0].yaxis.label.set_position((0, avepos))
a[0].set_ylabel('Hello, world!')
... y debería ver que la etiqueta todavía se ajusta adecuadamente de izquierda a derecha para evitar que se superpongan con las etiquetas, como de costumbre, pero ahora se ajustará para estar siempre exactamente entre las subtramas deseadas.
Además, si ni siquiera lo usa set_position
, la etiqueta aparecerá por defecto exactamente a la mitad de la figura . Supongo que esto se debe a que cuando la etiqueta finalmente se dibuja, matplotlib
usa 0.5 para la y
coordenada sin verificar si la transformación de coordenadas subyacente ha cambiado.