为什么 sns.lmplot 和 FacetGrid+plt.scatter 从相同的数据创建不同的散点?
Why do sns.lmplot and FacetGrid+plt.scatter create different scatter points from the same data?
我对 Python、pandas DataFrames 和 Seaborn 很陌生。当我试图更好地理解 Seaborn 时,尤其是 sns.lmplot,我发现由相同数据构成的两个图形之间存在差异,我认为它们应该看起来很相似,但我想知道为什么会这样。
数据:我的数据是一个 pandas DataFrame,有 454 行和 19 列。与此问题相关的数据包括 4 列,看起来像这样:
列:Av_density;预测2;本地地址;年份;
变量类型:连续变量;连续变量;分类变量 1...4;分类 2012...2014
没有缺失数据点。
我的目标是绘制一个 2x2 的图形面板,分别描述每个 LOC(=location) 的 Av_density 和 pred2 之间的关系,并用不同颜色标记年份。我用以下方式调用 seaborn:
import seaborn as sns
sns.set(style="whitegrid")
np.random.seed(sum(map(ord, "linear_categorical")))
(旁点:由于某种原因调用 "linear_quantitative" 不起作用,即我得到一个 "File "stdin",第 2 行
sns.lmplot("Av_density", "pred2", 数据, col="LOC", hue="YEAR", col_wrap=2);
^
语法错误:语法无效)
图法一、FacetGrid + 散点图:
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 数据点中 "mistake" 的原因。最理想的是,我会用一条较短的线来描述几年之间的趋势,而不是适当的回归,但我还没有弄清楚代码。
但在解决该问题之前,我真的很想知道我是否做错了我可以解决的问题,或者这是否是 lmplot 试图处理我的数据的问题?
热烈欢迎任何帮助、评论和想法!
-TA-
Ps。我是 运行 Python 2.7.8 和 Spyder 2.3.4
编辑: 我通过添加第一种方法来缩短 "trend lines":
sur.map(plt.plot,"Av_density", "pred2" );
还是想知道 lmplot 是什么弄乱了图形。
问题可能只是添加的回归线弄乱了 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)
我对 Python、pandas DataFrames 和 Seaborn 很陌生。当我试图更好地理解 Seaborn 时,尤其是 sns.lmplot,我发现由相同数据构成的两个图形之间存在差异,我认为它们应该看起来很相似,但我想知道为什么会这样。
数据:我的数据是一个 pandas DataFrame,有 454 行和 19 列。与此问题相关的数据包括 4 列,看起来像这样:
列:Av_density;预测2;本地地址;年份;
变量类型:连续变量;连续变量;分类变量 1...4;分类 2012...2014
没有缺失数据点。
我的目标是绘制一个 2x2 的图形面板,分别描述每个 LOC(=location) 的 Av_density 和 pred2 之间的关系,并用不同颜色标记年份。我用以下方式调用 seaborn:
import seaborn as sns
sns.set(style="whitegrid")
np.random.seed(sum(map(ord, "linear_categorical")))
(旁点:由于某种原因调用 "linear_quantitative" 不起作用,即我得到一个 "File "stdin",第 2 行
sns.lmplot("Av_density", "pred2", 数据, col="LOC", hue="YEAR", col_wrap=2);
^
语法错误:语法无效)
图法一、FacetGrid + 散点图:
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 数据点中 "mistake" 的原因。最理想的是,我会用一条较短的线来描述几年之间的趋势,而不是适当的回归,但我还没有弄清楚代码。
但在解决该问题之前,我真的很想知道我是否做错了我可以解决的问题,或者这是否是 lmplot 试图处理我的数据的问题?
热烈欢迎任何帮助、评论和想法!
-TA-
Ps。我是 运行 Python 2.7.8 和 Spyder 2.3.4
编辑: 我通过添加第一种方法来缩短 "trend lines":
sur.map(plt.plot,"Av_density", "pred2" );
还是想知道 lmplot 是什么弄乱了图形。
问题可能只是添加的回归线弄乱了 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)