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 bottomy topkwargs que entraron en una GridSpecinicialización, o conoce las posiciones de los bordes de sus ejes en Figurecoordenadas , también puede especificar la posición de la etiqueta en Figurecoordenadas 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, matplotlibusa 0.5 para la ycoordenada sin verificar si la transformación de coordenadas subyacente ha cambiado.