Aktualisieren:
Diese Funktion ist jetzt Teil des Proplot-Matplotlib-Pakets , das ich kürzlich auf pypi veröffentlicht habe. Wenn Sie Zahlen erstellen, werden die Beschriftungen standardmäßig von den Achsen "geteilt".
Ursprüngliche Antwort:
Ich habe eine robustere Methode entdeckt:
Wenn Sie die bottomund topkwargs kennen, die in eine GridSpecInitialisierung eingegangen sind , oder wenn Sie die Kantenpositionen Ihrer Achsen auf andere Weise in FigureKoordinaten kennen , können Sie die ylabel-Position auch in FigureKoordinaten mit einer ausgefallenen "Transformations" -Magie angeben . Beispielsweise:
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!')
... und Sie sollten sehen, dass das Etikett immer noch entsprechend von links nach rechts angepasst wird, um eine Überlappung mit Ticklabels zu vermeiden, genau wie normal - aber jetzt wird es so angepasst, dass es immer genau zwischen den gewünschten Unterplots liegt.
Wenn Sie nicht einmal verwenden set_position, wird das ylabel standardmäßig genau in der Mitte der Abbildung angezeigt . Ich vermute, das liegt daran, dass beim endgültigen Zeichnen der Beschriftung matplotlib0,5 für die yKoordinate verwendet wird, ohne zu überprüfen, ob sich die zugrunde liegende Koordinatentransformation geändert hat.