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 bottom
und top
kwargs kennen, die in eine GridSpec
Initialisierung eingegangen sind , oder wenn Sie die Kantenpositionen Ihrer Achsen auf andere Weise in Figure
Koordinaten kennen , können Sie die ylabel-Position auch in Figure
Koordinaten 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 matplotlib
0,5 für die y
Koordinate verwendet wird, ohne zu überprüfen, ob sich die zugrunde liegende Koordinatentransformation geändert hat.