Matplotlib: настройка расположения/положения легенды

Я создаю фигуру с несколькими подзаголовками. Один из этих подзаговоров дает мне некоторые проблемы, так как ни один из углов или центров осей не свободен (или может быть освобожден) для размещения легенды. Я бы хотел, чтобы легенда была помещена где-то посередине между "верхним левым" и "центральным левым" местоположениями, сохраняя отступы между ним и осью y равными легендам в других подзаголовках (которые размещенных с использованием одного из предопределенных ключевых слов местоположения легенды).

Я знаю, что я могу указать пользовательскую позицию с помощью loc=(x,y), но тогда я не могу понять, как получить отступы между легендой и осью y, чтобы они были равны значению, используемому другими легендами. Можно ли каким-то образом использовать свойство borderaxespad первой легенды? Хотя мне не удается заставить это работать.

Любые предложения были бы очень желанными!

Изменить: Вот (очень упрощенная) иллюстрация проблемы:

import matplotlib.pyplot as plt

fig, ax = plt.subplots(1, 2, sharex=False, sharey=False)
ax[0].axhline(y=1, label='one')
ax[0].axhline(y=2, label='two')
ax[0].set_ylim([0.8,3.2])
ax[0].legend(loc=2)

ax[1].axhline(y=1, label='one')
ax[1].axhline(y=2, label='two')
ax[1].axhline(y=3, label='three')
ax[1].set_ylim([0.8,3.2])
ax[1].legend(loc=2)

plt.show()

enter image description here

Мне хотелось бы, чтобы легенда в правом сюжете была перемещена вниз, чтобы она больше не перекрывалась с линией. В крайнем случае я мог бы изменить пределы оси, но я очень хотел бы избежать этого.

Ответ 1

Проведя слишком много времени на этом, я придумал следующее удовлетворительное решение (

Ответ 2

Я увидел ответ, который вы опубликовали, и попробовал его. Однако проблема заключается в том, что она также зависит от размера фигуры.

Здесь новая попытка:

import numpy
import matplotlib.pyplot as plt


x = numpy.linspace(0, 10, 10000)
y = numpy.cos(x) + 2.

x_value = .014    #Offset by eye
y_value = .55

fig, ax = plt.subplots(1, 2, sharex = False, sharey = False)
fig.set_size_inches(50,30)

ax[0].plot(x, y, label = "cos")
ax[0].set_ylim([0.8,3.2])
ax[0].legend(loc=2)

line1 ,= ax[1].plot(x,y)
ax[1].set_ylim([0.8,3.2])

axbox = ax[1].get_position()

fig.legend([line1], ["cos"], loc = (axbox.x0 + x_value, axbox.y0 + y_value))

plt.show()

Итак, теперь я получаю координаты из подзаголовка. Затем я создаю легенду, основанную на размерах всей фигуры. Следовательно, размер фигуры больше ничего не изменит для позиционирования легенды.

При значениях x_value и y_value легенда может быть помещена в подзаголовок. x_value был отмечен за хорошую переписку с "нормальной" легендой. Это значение может быть изменено по вашему желанию. y_value определяет высоту легенды.

enter image description here

Удачи!