2013-03-26 6 views
16

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

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() 

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

+0

По умолчанию текст заголовка фактически выравнивается по левому краю. Якорная точка для выравнивания находится в центре окна легенды. Можно ли указать другую опорную точку? Возможно, есть экземпляр VPacker или HPacker, связанный с Legend? – Erwin411

+0

Для моего текущего случая у меня есть решение: просто скажите 'l.get_title(). Set_ha (" center ")'. Затем текст центрируется с таинственной точкой привязки (которая находится примерно между ручками и текстами меток), и это выглядит хорошо. Тем не менее, для «очень супер длинного заголовка» 'якорная точка перемещается в левую границу поля ... – Erwin411

+0

Если бы те же вопросы, что и' set_ha ('left') 'не работает –

ответ

5

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

Короче говоря, что-то подобное может работать:

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

Спасибо! set_position() действительно перемещает заголовок. Тем не менее, я бы не хотел жестко связать перемещение, а скорее вычислил его из экстентов коробки. Это, похоже, довольно активно ... – Erwin411

6

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

  • выравнивание по левому краю

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

    enter image description here

  • по правому краю

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

    enter image description here

Смежные вопросы