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

Bbox_to_anchor и loc в matplotlib

Я наткнулся на matplotlib код, который настраивает расположение легенды с использованием ключевых слов loc и bbox_to_anchor. Например:

fig.legend([line1, line2], ['series1', 'series2'], bbox_to_anchor=[0.5, 0.5], 
           loc='center', ncol=2)

Я видел вариацию выше, где bbox_to_anchor используется после loc.

Я понимаю цель использования bbox_to_anchor и loc отдельно. Однако есть ли какая-либо польза от использования как в одной легенде? Из моего понимания и использования мне кажется, что если bbox_to_anchor указано, то параметр loc в значительной степени не волнует.

Может ли кто-нибудь подтвердить это? Я не вижу никакой документации относительно этого.

4b9b3361

Ответ 1

Когда bbox_to_anchor и loc используются вместе, аргумент loc будет информировать matplotlib, какая часть ограничивающего блока легенды должна быть помещена в аргументы bbox_to_anchor. Например (я немного упростил команду), три варианта ниже будут создавать разные места для вашей легенды,

 fig.legend([line1], ['series1'], bbox_to_anchor=[0.5, 0.5], loc='center')
 fig.legend([line1], ['series1'], bbox_to_anchor=[0.5, 0.5], loc='center left')
 fig.legend([line1], ['series1'], bbox_to_anchor=[0.5, 0.5], loc='center right')

Первая команда поместит центр ограничивающего прямоугольника в координаты осей 0,5,0,5. Второй поместит левый край центра ограничительной рамки в те же координаты (т.е. Сдвиг легенды вправо). Наконец, третий вариант поместит правый правый край ограничивающего прямоугольника в координаты (т.е. Сдвиг легенды влево).

Ответ 2

Объяснение @Gabriel немного вводит в заблуждение. bbox_to_anchor=[x0, y0] создаст ограничивающий прямоугольник с нижним левым углом в позиции [x0, y0]. Протяженность ограничивающей рамки равна нулю - эквивалентна bbox_to_anchor=[x0, y0, 0, 0]. Затем легенда будет помещена "внутри" этого поля и наложена на нее в соответствии с указанным параметром loc. Поэтому loc указывает, где внутри поля находится легенда.

Также см. этот вопрос Что означает атрибут 4-элементного кортежа для 'bbox_to_anchor' в matplotlib?