В чем разница между kwargs и, например, scatter_kws в seaborn? - PullRequest
0 голосов
/ 17 июня 2019

Поскольку seaborn использует matplotlib для построения графиков, большинство (все?) Его функций имеют какой-то способ передачи аргументов в подчиненную функцию matplotlib, которая рисует график.Это хороший дизайн, который обеспечивает гибкость, не мешая высокоуровневым функциям seaborn со слишком большим количеством аргументов.

Однако, кажется, есть два отдельных механизма для этого.Некоторые функции просто принимают произвольные аргументы ключевых слов, а любые, которые не распознаются высокоуровневой функцией, просто передаются в базовую функцию matplotlib.Другие требуют, чтобы вы добавили дополнительные аргументы в ключевые слова.

Например, seaborn.scatterplot и seaborn.lmplot оба AFAIK используют matplotlib.pyplot.scatter в качестве базовой функции построения графика.Если мы хотим передать аргумент s в matplotlib.pyplot.scatter для управления размером, в seaborn.scatterplot мы можем просто добавить его к вызову функции:

sns.scatterplot(data=df, x='mpg',y='weight',s=10)

, но в seaborn.lmplotмы должны вставить это в scatter_kws dict:

sns.lmplot(data=df, x='mpg',y='weight', scatter_kws={'s' : 10})

Возможно, я упускаю что-то очевидное, но я не смог понять, почему используются эти разные механизмы.Это связано с тем, что Seaborn работает невидимо для конечного пользователя?Один стиль унаследован, а код переходит в другой стиль?

Ответы [ 2 ]

1 голос
/ 17 июня 2019

lmplot наносит regplot на FacetGrid. regplot состоит из группы точек, для которых используется scatter, и линии, для которой используется plot.

Представьте, что вы передаете аргумент s каждой базовой функции matplotlib. Он будет передан в scatter, где он служит своей цели, но также в plot, который не имеет аргумента s. Boom. Ошибка.

Кроме того, существуют аргументы, которые действительны для обоих типов, например color; но вы можете захотеть, чтобы линия regplot была другого цвета, чем точки.

Вот почему те функции в seaborn, которые объединяют нескольких типов графиков, допускают эти отдельные аргументы.

1 голос
/ 17 июня 2019

seaborn.lmplot имеет параметры scatter_kws и line_kws.Ключевое слово scatter_kws dict передается базовому вызову функции scatter Matplotlib, а line_kws передается базовому вызову plot функции Matplotlib.

Поскольку базовый Matplotlib scatter иВызовы plot имеют общие параметры некоторых ключевых слов (например, color), использование двух диктов позволяет пользователю управлять обоими индивидуально.То есть пользователь может указать цвет графика рассеяния, скажем, красный, а график может быть синим.

В отличие от этого, sns.scatterplot отправляет все свои аргументы ключевого слова влежащий в основе Matplotlib scatter вызов.Таким образом, нет необходимости в неоднозначности.

...