Обновить:
Эта функция теперь является частью пакета proplot matplotlib, который я недавно выпустил на pypi. По умолчанию, когда вы делаете фигуры, метки «разделяются» между осями.
Оригинальный ответ:
Я обнаружил более надежный метод:
Если вы знаете bottom
и top
kwargs, которые вошли в GridSpec
инициализацию, или вы знаете положение краев ваших осей в Figure
координатах , вы также можете указать положение ylabel в Figure
координатах с помощью некоторой причудливой магии «преобразования». Например:
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!')
... и вы должны увидеть, что метка по- прежнему соответствующим образом регулируется влево-вправо, чтобы не перекрываться с метками, как обычно, но теперь она будет регулироваться, чтобы всегда находиться точно между желаемыми подзаголовками.
Более того, если вы даже не используете set_position
, ylabel по умолчанию будет отображаться ровно на полпути вверх по цифре . Я предполагаю, что это связано с тем, что, когда метка, наконец, нарисована, matplotlib
используется 0,5 для y
-координаты без проверки, изменилось ли базовое преобразование координат.