Выравнивание текста в легенде 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
Ответы
Ответ 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))