Выравнивание текста в легенде Matplotlib - PullRequest
14 голосов
/ 29 октября 2011

Я пытаюсь выровнять записи справа в легенде осей matplotlib (по умолчанию они выровнены по левому краю), но не могу найти какой-либо способ сделать это.У меня есть следующие настройки:

(я добавил данные и метки к осям my_fig с помощью команды ax.plot ())

ax = my_fig.get_axes()[0]
legend_font = FontProperties(size=10)
ax.legend(prop=legend_font, num_points=1, markerscale=0.5)

Список аргументов ключевого слова легенды приведен вдокументы для matplotlib Axes , но, похоже, не существует простого способа установить выравнивание записей легенды там.Кто-нибудь знает, как это сделать?Спасибо.

РЕДАКТИРОВАТЬ:

Чтобы прояснить, что я пытаюсь достичь, сейчас моя легенда выглядит так:

Maneuver: 12-OCT-2011 12:00 UTC 

Bias: 14-OCT-2011 06:00 UTC

Я хочу этовыглядеть так:

Maneuver: 12-OCT-2011 12:00 UTC 

    Bias: 14-OCT-2011 06:00 UTC

Ответы [ 2 ]

20 голосов
/ 10 ноября 2011

Бэкдор, который вы ищете, выглядит следующим образом:

# get the width of your widest label, since every label will need 
# to shift by this amount after we align to the right
shift = max([t.get_window_extent().width for t in legend.get_texts()])
for t in legend.get_texts():
    t.set_ha('right') # ha is alias for horizontalalignment
    t.set_position((shift,0))
9 голосов
/ 31 мая 2013

Я пытался заставить пример работать, но не смог.

По крайней мере, начиная с версии 1.1.1 matplotlib (может быть, и раньше) нам нужен выделенный экземпляр рендерера. Позаботьтесь о своем бэкэнде, который определяет визуализатор. В зависимости от серверной части вывод может выглядеть нормально на экране, но неутешительным как PDF.

# get the width of your widest label, since every label will need 
#to shift by this amount after we align to the right
renderer = figure.canvas.get_renderer()
shift = max([t.get_window_extent(renderer).width for t in legend.get_texts()])
for t in legend.get_texts():
    t.set_ha('right') # ha is alias for horizontalalignment
    t.set_position((shift,0))
...