Aktualizacja:
Ta funkcja jest teraz częścią pakietu proplot matplotlib, który niedawno wydałem na pypi. Domyślnie podczas tworzenia figur etykiety są „wspólne” między osiami.
Oryginalna odpowiedź:
Odkryłem solidniejszą metodę:
Jeśli znasz bottom
i top
kwargs, które przeszły podczas GridSpec
inicjalizacji, lub w inny sposób znasz położenie krawędzi swoich osi we Figure
współrzędnych , możesz również określić położenie ylabel we Figure
współrzędnych za pomocą jakiejś fantazyjnej magii „transformacji”. Na przykład:
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
))
a[0].yaxis.label.set_position((0, avepos))
a[0].set_ylabel('Hello, world!')
... i powinieneś zobaczyć, że etykieta nadal odpowiednio dostosowuje się od lewej do prawej, aby nie nakładać się na etykiety znaczników, tak jak zwykle - ale teraz dostosuje się, aby zawsze znajdować się dokładnie między pożądanymi polami.
Ponadto, jeśli nawet nie używasz set_position
, ylabel pojawi się domyślnie dokładnie w połowie liczby . Zgaduję, że dzieje się tak dlatego, że kiedy etykieta jest ostatecznie rysowana, matplotlib
używa 0,5 dla y
-korzędnej bez sprawdzania, czy podstawowa transformacja współrzędnych uległa zmianie.