Atualizar:
Esse recurso agora faz parte do pacote proplot matplotlib que eu liberei recentemente no pypi. Por padrão, quando você cria figuras, os rótulos são "compartilhados" entre os eixos.
Resposta original:
Eu descobri um método mais robusto:
Se você conhece o bottom
e top
kwargs que foram GridSpec
iniciados, ou conhece as posições das arestas dos seus eixos em Figure
coordenadas , também pode especificar a posição do marcador em Figure
coordenadas com alguma mágica "transformada" sofisticada. Por exemplo:
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!')
... e você deve ver que o rótulo ainda se ajusta de maneira adequada à esquerda e à direita para não se sobrepor aos ticklabels, como normalmente - mas agora ele será ajustado para estar sempre exatamente entre as subparcelas desejadas.
Além disso, se você nem usar set_position
, o rótulo será exibido por padrão exatamente na metade da figura . Suponho que isso ocorre porque, quando o rótulo é finalmente desenhado, matplotlib
usa 0,5 para o y
-coordinate sem verificar se a transformação de coordenadas subjacente foi alterada.