Подтвердить что ты не робот

Выравнивание текста в легенде Matplotlib

Я пытаюсь правильно выровнять записи в легенде осей 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)

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

EDIT:

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

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
4b9b3361

Ответ 1

Бэкдор, который вы ищете, следующий:

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

Ответ 2

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

По крайней мере, начиная с matplotlib версии 1.1.1 (возможно, раньше) нам нужен выделенный экземпляр визуализатора. Позаботьтесь о своем бэкэнд, который определяет рендер. В зависимости от бэкэнд вывод может выглядеть нормально на экране, но печально, как 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))