Girando legenda ou adicionando patch ao rótulo do eixo no matplotlib

Eu tenho um caso de uso incomum no matplotlib que estou tentando resolver. Eu tenho um par de eixos criados usandotwinx(). Cada um contém exatamente um objeto de linha, com estilos diferentes. Em vez de ter uma legenda convencional, devo adicionar um patch que represente cada linha ao rótulo y de cada eixo. Aqui está o que estou tentando alcançar:

Idealmente, o patch estaria acima do texto, mas esse é um detalhe muito menor se comparado ao alcance do resultado desejado.

Eu tentei duas abordagens para esse problema, ambas terminadas em falha. Talvez um guru matplotlib possa ajudar:

# 1: Usando legendas deslocadas

from matplotlib import pyplot as plt
fig = plt.figure()
ax = fig.subplots(111)
ax = fig.add_subplot(111)
ax2 = ax.twinx()
l1, = ax.plot((0, 1), (1, 0), linestyle='-', color='blue')
l2, = ax.plot((0, 1), (0, 1), linestyle='--', color='red')
leg1 = ax.legend([l1], ['Solid Blue Line'], bbox_to_anchor=(-0.102, 0., 0.102, 1.), frameon=False, mode='expand', loc=4)
leg2 = ax2.legend([l2], ['Dashed Red Line'], bbox_to_anchor=(1.102, 0., 0.102, 1.), frameon=False, mode='expand', loc=3)

Como esperado, isso coloca as legendas corretamente, mas não as gira. Não consigo fazer a rotação porque, aparentemente, as lendas não podem ser giradas, apesar de seremArtist extensões. Por exemplo.,leg1.set_transform(leg1.get_transform() + Affine2D().rotate_deg(-90)) não faz nada para mudar o ângulo da legenda:

# 2 Usando um AnchoredOffsetBox personalizado

Nesta abordagem, tentei construir uma caixa personalizada contendo um texto e um patch. Infelizmente, o patch não aparece corretamente.

from matplotlib import pyplot as plt
from matplotlib.lines import Line2D
from matplotlib.offsetbox import AnchoredOffsetbox, TextArea, DrawingArea, HPacker
from matplotlib.transform import Affine2D

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot([1, 2, 3], [0, 3, -1], color='g', linestyle='solid')
textArea = TextArea('This is an x-label')
drawArea = DrawingArea(1., 1.)
patch = Line2D((0, 1), (0, 1), color='g', linestyle='solid')
drawArea.add_artist(patch)
content = HPacker(children=[textArea, drawArea], align="center", pad=0, sep=5)
label = AnchoredOffsetbox(loc=10, child=content, pad=0, bbox_to_anchor=(0.5, -0.1), bbox_transform=ax.transAxes, frameon=False)
ax.add_artist(label)
label.set_transform(label.get_transform() + Affine2D().rotate_deg(-90))

Mais uma vez, a rotação não funciona. Além disso, o patch não é dimensionado razoavelmente, como seria em uma entrada de legenda (observe o pequeno ponto verde no final do rótulo):

É possível alcançar algo como o resultado que desejo no MatPlotLib? Estou disposto a investigar o código-fonte e, possivelmente, enviar um PR, se isso ajudar, mas não tenho uma idéia clara de por onde começar.

ATUALIZAR

Observando o código fonte, oset_transform métodos dematplotlib.offsetbox.TextArea ematplotlib.offsetbox.DrawingArea são completamente ignorados. Isso significa que minha segunda tentativa seria inútil, mesmo que eu fizesse o patch corretamente.

questionAnswers(1)

yourAnswerToTheQuestion