Seaborn FacetGrid: при отображении полосы уклонение не реализовано

Используя Seaborn, я пытаюсь создать факторный график, в котором каждый подзаговор показывает полосу. В полосе я хотел бы контролировать несколько аспектов маркеров.

Вот первый метод, который я попробовал:

import seaborn as sns
tips = sns.load_dataset("tips")
g = sns.FacetGrid(tips, col="time",  hue="smoker")
g = g.map(sns.stripplot, 'day', "tip", edgecolor="black", 
          linewideth=1, dodge=True, jitter=True, size=10)

И произвел следующий вывод без уклонения

вывод без уклонения

В то время как большинство ключевых слов были реализованы, оттенок не был устранен.

Я был успешным с другим подходом:

kws = dict(s=10, linewidth=1, edgecolor="black")
tips = sns.load_dataset("tips")
sns.factorplot(x='day', y='tip', hue='smoker', col='time', data=tips,
          kind='strip',jitter=True, dodge=True, **kws, legend=False)

Это дает правильный вывод: правильный вывод

В этом выводе оттенок опущен.

Мой вопрос: почему g.map(sns.stripplot...) не увернулся от оттенка?


person mtd91429    schedule 09.09.2017    source источник


Ответы (1)


Параметр hue нужно будет сопоставить с функцией sns.stripplot через g.map вместо того, чтобы устанавливать hue в Facetgrid.

import seaborn as sns
tips = sns.load_dataset("tips")
g = sns.FacetGrid(tips, col="time")
g = g.map(sns.stripplot, 'day', "tip", "smoker", edgecolor="black", 
          linewidth=1, dodge=True, jitter=True, size=10)

введите здесь описание изображения

Это связано с тем, что map вызывает sns.stripplot индивидуально для каждого значения в столбце time, и, если hue указано для полного Facetgrid, для каждого значения оттенка, так что dodge теряет свое значение при каждом отдельном вызове.

Я могу согласиться с тем, что это поведение не очень интуитивно понятно, если вы не посмотрите на исходный код самого map.

Обратите внимание, что приведенное выше решение вызывает предупреждение:

lib\site-packages\seaborn\categorical.py:1166: FutureWarning:elementwise comparison failed;
   returning scalar instead, but in the future will perform elementwise comparison
  hue_mask = self.plot_hues[i] == hue_level

Честно говоря, я не знаю, о чем это говорит нам; но, похоже, пока это не испортит решение.

person ImportanceOfBeingErnest    schedule 09.09.2017
comment
Это действительно сделало мой день! Я передавал переменную цвета как оттенок в FacetGrid, хотя мог бы просто передать ее в функцию карты. - person Kebby; 26.05.2021