为什么sns.lmplot和FacetGrid + plt.scatter会从相同的数据创建不同的散点图?

时间:2015-05-19 11:38:28

标签: python pandas matplotlib spyder seaborn

我对Python,pandas DataFrames和Seaborn都很陌生。当我试图更好地理解Seaborn时,特别是sns.lmplot,我发现两个由相同数据组成的数字之间存在差异,我认为它们应该看起来很相似,我想知道为什么会这样。

数据:我的数据是一个pandas DataFrame,有454行和19列。与此问题相关的数据包括4列,如下所示:

列:Av_density; PRED2; LOC;年;

变量类型:连续变量;连续变量;分类变量1 ... 4;分类2012 ... 2014

没有丢失的数据点。

我的目标是绘制一个2x2图形面板,分别描述每个LOC(=位置)的Av_density和pred2之间的关系,其中年份标记有不同的颜色。我打电话给seaborn:

import seaborn as sns
sns.set(style="whitegrid")
np.random.seed(sum(map(ord, "linear_categorical")))

侧点:由于某种原因,调用" linear_quantitative"不起作用,即我得到"文件" stdin",第2行     sns.lmplot(" Av_density"," pred2",数据,col =" LOC",hue =" YEAR",col_wrap = 2) ;
  ^ SyntaxError:语法无效"

图方法1,FacetGrid + scatter:

sur=sns.FacetGrid(Data,col="LOC", col_wrap=2,hue="YEAR")
sur.map(plt.scatter, "Av_density", "pred2" );
plt.legend()

这可以准确地分散数据。您可以在此处查看图片:https://drive.google.com/file/d/0B7h2wsx9mUBScEdUbGRlRk5PV1E/view?usp=sharing

图方法2,sns.lmplot:

sns.lmplot("Av_density", "pred2", Data, col="LOC", hue="YEAR", col_wrap=2);

这会使图形面板精确地除以LOC,不同颜色的年份,但数据点的分散看起来不正确。相反,看起来lmplot已经对数据点进行了线性化,并且除了回归线之外还丢失了它应该绘制的原始散点。 你可以在这里看到这个数字:https://drive.google.com/file/d/0B7h2wsx9mUBSRkN5ZXhBeW9ob1E/view?usp=sharing

我的数据每年每个位置仅产生三个点,我首先想知道这是否是导致"错误的原因。在lmplot datapoint中。最好我会用一条较短的线描述几年之间的趋势,而不是一个适当的回归,但我还没有想出代码。

但是在解决这个问题之前,我真的想知道我能解决的问题是否有问题,或者这是lmplot试图处理我的数据的问题?

热烈欢迎任何有关此问题的帮助,意见和建议!

-TA -

聚苯乙烯。我正在使用Spyder 2.3.4运行Python 2.7.8

编辑: 我变得更短"趋势线"使用第一种方法添加:

sur.map(plt.plot,"Av_density", "pred2" );

仍然想知道是什么让lmplot弄乱了这个数字。

1 个答案:

答案 0 :(得分:2)

问题可能只是增加的回归线弄乱了y轴,因此无法看到数据的可变性。 尝试根据原始绘图中的可变性重置y轴,看看它们是否显示相同的内容,例如

fig1 = sns.lmplot("Av_density", "pred2", Data, col="LOC", hue="YEAR", col_wrap=2);
fig1.set(ylim=(-0.03, 0.05))
plt.show(fig1)