Seaborn и matplotlib управляют легендами на участках - PullRequest
2 голосов
/ 26 января 2020

Я немного поиграл с plt.legend () и ax.legend () и легендой от самого seaborn, и я думаю, что что-то упустил.

Мой первый вопрос: может, кто-нибудь объяснит мне, как эти go вместе, как они работают, и если у меня есть подсюжеты, что превосходит что? Имеется в виду, могу ли я задать общее определение (например, иметь эту легенду во всех подсюжетах в этом lo c), а затем перезаписать это определение для определенных c подплотов (например, с помощью ax.legend ())?

Мой второй вопрос практичен и показывает мои проблемы. Давайте возьмем набор данных «Морские курящие», чтобы проиллюстрировать его на:

Plot example.

Если я использую просто seaborn, я получаю легенду, как в Подплоте 1 и 3 - он имеет метку 'hue' и соответствует определенному размеру шрифта. Тем не менее, я не могу контролировать его местоположение (по умолчанию, см. Разницу между 1 и 3). Если я использую ax.legend (), как в Подплоте 2, тогда я могу изменить указанный подплот c, но я теряю функцию «оттенок моря» (обратите внимание, что «пол» исчезает), и она не соответствует моим определениям шрифта. Если я использую plt.legend (), он влияет только на Подплот до него (Подплот 4 в этом случае). Как мне все это объединить? Например. иметь одно определение для всех участков или как контролировать дефолт по морю? Чтобы сделать ясную цель, как иметь легенду, как в Подплоте 1, где метки автоматически берутся из данных (но я могу их изменить), а расположение, размер шрифта, ... устанавливается одинаковым для всех подзаговоров (например, вверху справа, размер шрифта 10, ...)?

Спасибо за помощь и объяснения.

1 Ответ

1 голос
/ 26 января 2020

Легенды Seaborn всегда называются с ключевым словом loc=best. Это жестко закодировано в исходном коде. Вы можете изменить исходный код, например, в этой строке и заменить на ax.legend(). Тогда установка параметра r c в вашем коде, например

plt.rc('legend', loc="upper right")

, даст желаемый результат.

Единственный другой вариант - создать легенду вручную, как вы делаете во втором кейс,

ax2.legend(loc="upper right", title="sex", title_fontsize="x-large")
...