Различия в параметрах рассеяния Seaborn и параметров lmplot - PullRequest
1 голос
/ 08 апреля 2019

Некоторые модули быстрой загрузки:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

di = sns.load_dataset('iris')

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

sns.scatterplot(x=di['sepal_length'], y=di['sepal_width'], 
            hue=di['species']);

Однако при lmplot возникает TypeError и требует аргумент data. После выполнения аргумента данных он все еще не работает:

sns.lmplot(x=di['sepal_length'], y=di['sepal_width'], 
            hue=di['species'], data=di);

TypeError: '<' not supported between instances of 'str' and 'float'

Однако, это работает просто отлично:

sns.lmplot(x='sepal_length', y='sepal_width', hue='species', data=di);

После прочтения справки API я вижу, что lmplot требует аргумент data, а scatterplot - нет. Здесь что-то происходит под капотом? Также, каковы лучшие практики для синтаксиса здесь.

1 Ответ

0 голосов
/ 08 апреля 2019

Причина, по которой ваш код не работает, - неправильное использование аргумента data. Когда передается data, x, y и hue будут обрабатываться как объекты, с помощью которых можно проиндексировать объект, переданный в data, используя метод __getitem__. Так, например, x='sepal_length', y='sepal_width', data=di эквивалентно x=di['sepal_length'], y=di['sepal_width']

Соответственно, это работает:

sns.lmplot(x='sepal_length', y='sepal_width', hue='species', data=di);

То, что вы пытались сделать, было в основном эквивалентно x=di[di['sepal_length']], y=di[di['sepal_width']], hue=di[di['species']].

Возвращаясь ко второй части вашего вопроса о разнице между scatterplot и lmplot:

scatterplot - функция Axes -уровня; он полагается только на объект matplotlib Axes, который при построении графика может работать с такими различными типами коллекций, как lists и np.ndarrays. Функционально, более или менее, он такой же, как pyplot.scatter с некоторыми необычными цветами по умолчанию.

С другой стороны, lmplot опирается на sns.FacetGrid (документация доступна здесь ). FacetGrid - это чисто sns объект, для создания которого требуется pd.DataFrame. Соответственно, поэтому, чтобы lmplot работал, он должен взять pd.DataFrame.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...