Ответ 1
Проведя слишком много времени на этом, я придумал следующее удовлетворительное решение (
Я создаю фигуру с несколькими подзаголовками. Один из этих подзаговоров дает мне некоторые проблемы, так как ни один из углов или центров осей не свободен (или может быть освобожден) для размещения легенды. Я бы хотел, чтобы легенда была помещена где-то посередине между "верхним левым" и "центральным левым" местоположениями, сохраняя отступы между ним и осью 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()
Мне хотелось бы, чтобы легенда в правом сюжете была перемещена вниз, чтобы она больше не перекрывалась с линией. В крайнем случае я мог бы изменить пределы оси, но я очень хотел бы избежать этого.
Проведя слишком много времени на этом, я придумал следующее удовлетворительное решение (
Я увидел ответ, который вы опубликовали, и попробовал его. Однако проблема заключается в том, что она также зависит от размера фигуры.
Здесь новая попытка:
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
определяет высоту легенды.
Удачи!