Seaborn的散点图和lmplot参数的差异

时间:2019-04-08 04:27:14

标签: python python-3.x pandas matplotlib seaborn

一些快速加载插件:

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参数。满足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 reference之后,我看到lmplot需要data参数,而scatterplot则不需要。引擎盖下面有什么不同的事情吗?另外,这里语法的最佳做法是什么。

1 个答案:

答案 0 :(得分:0)

您的代码不起作用的原因是滥用data参数。传递data的地方,xyhue将被当作对象,使用它们的{{1 }} 方法。因此,例如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']]之间的区别:

scatterplotlmplot级的功能;它仅依赖于scatterplot的{​​{1}}对象,该对象在绘制时可以与Axesmatplotlib这样的各种收集类型一起使用。从功能上讲,它或多或少与Axes相同,但带有一些默认的奇特颜色。

另一方面,lists依赖于np.ndarrays(可用文档here)。 pyplot.scatter是一个纯lmplot对象,在构造时需要sns.FacetGrid。因此,为了使FacetGrid工作,必须 使用sns