Aggiornare:
Questa funzione fa ora parte del pacchetto proplot matplotlib che ho recentemente rilasciato su pypi. Per impostazione predefinita, quando si creano figure, le etichette vengono "condivise" tra gli assi.
Risposta originale:
Ho scoperto un metodo più solido:
Se conosci i kwarg bottome quelli topche sono andati in GridSpecun'inizializzazione, o altrimenti conosci le posizioni dei bordi degli assi in Figurecoordinate , puoi anche specificare la posizione dell'etichetta in Figurecoordinate con un po 'di fantasia "trasformare" la magia. Per esempio:
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!')
... e dovresti vedere che l'etichetta si adatta ancora in modo appropriato da sinistra a destra per evitare di sovrapporsi con ticklabels, proprio come normale - ma ora si adatterà per essere sempre esattamente tra i sottotrame desiderati.
Inoltre, se non lo usi nemmeno set_position, lo ylabel apparirà di default esattamente a metà della cifra . Immagino che ciò sia dovuto al fatto che quando l'etichetta viene finalmente disegnata, matplotlibusa 0,5 per il ycoordinato senza verificare se la trasformazione delle coordinate sottostante è cambiata.