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 bottom
et top
qui sont entrés dans une GridSpec
initialisation, ou si vous connaissez les positions des bords de vos axes en Figure
coordonnées , vous pouvez également spécifier la position de l'étiquette y en Figure
coordonné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, matplotlib
utilise 0,5 pour la y
-coordonnée sans vérifier si la transformation de coordonnées sous-jacente a changé.