Matplotlib: выравнивание названия легенды

В matplotlib, как я могу настроить выравнивание названия легенды? Он всегда центрирован, но мне нужно, чтобы он был выровнен с полем легенды. Я попытался изменить выравнивание заголовка Text artist, который не имеет никакого эффекта. Подробнее см. Следующий пример:

from pylab import *

x = linspace(0, 1)
plot(x, x, label="1")
plot(x, x**2, label="2")
plot(x, x**3, label="3")
plot(x, sqrt(x), label="square root")

l = legend(title="Title", loc="best")
l.get_title().set_ha("left")               # <== does not work

show()

Вопрос сводится к тому, что и кто контролирует опорную точку выравнивания названия? Заметное влияние имеет изменение выравнивания на "правый" или "центр". Второе наблюдение: для длинной строки заголовка точка привязки перемещается к левой границе окна легенды...

Ответ 1

Мне кажется, вам нужно вытеснить объект Text, используя метод set_position((x, y)). Единицы x и y являются пикселями, поэтому вам придется поэкспериментировать с тем, какие значения выглядят правильно, или использовать Transform. Я не уверен, какая комбинация Transforms может быть наиболее полезной.

Итак, что-то вроде этого может работать:

l.get_title().set_position((-10, 0)) # -10 is a guess

Ответ 2

Вы можете выровнять установку полных легенд leg._legend_box.align. Это выравнивает все, что находится внутри поля легенды, но эффект является желательным для названия с обеих сторон окна, а не центра.

  • Выровненный слева

    leg = plt.legend(title="Title")
    leg._legend_box.align = "left"
    

    введите описание изображения здесь

  • Выровненный по правому краю

    leg = plt.legend(title="Title")
    leg._legend_box.align = "right"
    

    введите описание изображения здесь