Легенда Matplotlib: метки над маркерами

У меня есть сюжет с несколькими линиями, каждая из которых помечена отдельно. Я хотел бы поместить легенду в сюжет, чтобы можно было идентифицировать отдельные линии. Порядок меток и маркеров по умолчанию выглядит примерно так:

маркер : метка
маркер : метка
маркер : метка
... и так далее.

По различным эстетическим причинам я хотел бы, чтобы количество столбцов в моей легенде равнялось количеству строк (и меток), которое я меняю с помощью параметра ncol. Итак, на данный момент моя легенда выглядит так:

маркер : метка маркер : метка маркер : метка

Однако для меня было бы намного понятнее, если бы метки располагались над маркерами в таком расположении. Я хотел бы что-то вроде:

этикетка этикетка этикетка
маркер маркер маркер маркер

Мне интересно, есть ли способ "быстрого исправления" для достижения такой легенды.


person allhands    schedule 01.10.2014    source источник
comment
Вы уже нашли быстрое решение этой проблемы? Мне тоже было бы интересно этим заняться.   -  person Jean-Sébastien    schedule 25.08.2015
comment
Из документации кажется, что единственными вариантами являются маркер: метка или метка: маркер.   -  person pceccon    schedule 25.04.2016


Ответы (1)


В конце концов, я решил вручную настроить позиции текстовых элементов в легенде, используя legend.get_texts() для перебора каждого текстового объекта. Какой-то фиктивный код:

for txt in legend.get_texts():
    txt.set_ha("center") # horizontal alignment of text item
    txt.set_x(-5) # x-position
    txt.set_y(10) # y-position

Увеличивая позицию по оси Y, вы сдвигаете метку вверх (т.е. над маркером). Точно так же, уменьшая x-позицию, можно добиться выравнивания по верхней части маркера.

person allhands    schedule 20.05.2016