一些快速加载插件:
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则不需要。引擎盖下面有什么不同的事情吗?另外,这里语法的最佳做法是什么。
答案 0 :(得分:0)
您的代码不起作用的原因是滥用data
参数。传递data
的地方,x
,y
和hue
将被当作对象,使用它们的{{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']]
之间的区别:
scatterplot
是lmplot
级的功能;它仅依赖于scatterplot
的{{1}}对象,该对象在绘制时可以与Axes
和matplotlib
这样的各种收集类型一起使用。从功能上讲,它或多或少与Axes
相同,但带有一些默认的奇特颜色。
另一方面,lists
依赖于np.ndarrays
(可用文档here)。 pyplot.scatter
是一个纯lmplot
对象,在构造时需要sns.FacetGrid
。因此,为了使FacetGrid
工作,必须 使用sns
。