Mettre à jour:
Cette fonctionnalité fait maintenant partie du paquet proplot matplotlib que j'ai récemment publié sur pypi. Par défaut, lorsque vous créez des figures, les étiquettes sont "partagées" entre les axes.
Réponse originale:
J'ai découvert une méthode plus robuste:
Si vous connaissez les kwargs bottomet topqui sont entrés dans une GridSpecinitialisation, ou si vous connaissez les positions des bords de vos axes en Figurecoordonnées , vous pouvez également spécifier la position de l'étiquette y en Figurecoordonnées avec une magie de «transformation» sophistiquée. Par exemple:
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!')
... et vous devriez voir que l'étiquette s'ajuste toujours de manière appropriée de gauche à droite pour éviter de se chevaucher avec les étiquettes, comme d'habitude - mais maintenant elle s'ajustera pour être toujours exactement entre les sous-graphiques souhaités.
De plus, si vous ne l'utilisez même pas set_position, le ylabel apparaîtra par défaut exactement à mi-hauteur de la figure . Je suppose que c'est parce que lorsque l'étiquette est finalement dessinée, matplotlibutilise 0,5 pour la y-coordonnée sans vérifier si la transformation de coordonnées sous-jacente a changé.