【发布时间】:2015-07-31 05:16:21
【问题描述】:
我对 Python、pandas DataFrames 和 Seaborn 还是很陌生。当我试图更好地理解 Seaborn,尤其是 sns.lmplot 时,我发现了由相同数据组成的两个数字之间的差异,我认为这应该看起来很相似,我想知道为什么会这样。
数据:我的数据是一个有 454 行和 19 列的 pandas DataFrame。与此问题相关的数据包括 4 列,如下所示:
列:Av_density; pred2;本地化;年份;
变量类型:连续变量;连续变量;分类变量 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", Data, col="LOC", hue="YEAR", col_wrap=2);
^
SyntaxError: 无效语法")
图法一,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
图法二,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 数据点中“错误”的原因。理想情况下,我会用一条较短的线来描述年份之间的趋势,而不是适当的回归,但我还没有弄清楚代码。
但在解决这个问题之前,我真的很想知道我做错了什么可以修复,或者这是否是 lmplot 试图处理我的数据的问题?
热烈欢迎任何有关这方面的帮助、cmets 和想法!
-TA-
附言。我正在使用 Spyder 2.3.4 运行 Python 2.7.8
编辑: 我通过添加第一种方法得到更短的“趋势线”:
sur.map(plt.plot,"Av_density", "pred2" );
还是想知道是什么让 lmplot 弄乱了这个数字。
【问题讨论】:
-
您是否尝试过使用参数
fit_reg = False来更好地查看 sns.lmplot 版本的绘图中的数据点? -
好建议,是的,我确实尝试过,然后散点看起来与第一种方法完全相同。这也是为什么我怀疑只回归 3 个数据点会在 lmplot 中搞砸一些东西......
-
但是问题不在于添加回归(改变 y 轴上的比例)隐藏了数据点的可变性(因此看不到散点)?
-
是的!事实上,我完全错过了第二种方法的规模。设置 ylim 和 xlim 效果很好!谢谢!
标签: python pandas matplotlib spyder seaborn