添加回归线

时间:2018-02-26 10:33:49

标签: python matplotlib seaborn

使用我从this question获得的提示,我能够在海啸关节图上放置一条回归线。

以下代码段创建了以下图表:

代码1

import numpy as np
import pandas as pd
import seaborn as sns
sns.set(style="white")

# Generate a random correlated bivariate dataset
rs = np.random.RandomState(5)
mean = [0, 0]
cov = [(1, .5), (.5, 1)]
x1, x2 = rs.multivariate_normal(mean, cov, 500).T
x1 = pd.Series(x1, name="$X_1$")
x2 = pd.Series(x2, name="$X_2$")

# Show the joint distribution using kernel density estimation
g = sns.jointplot(x1, x2, kind="kde", size=7, space=0)
sns.regplot(x1,x2, scatter=False, ax=g.ax_joint)

图1a

enter image description here

在混合中添加sns.regplot(x1,x2, scatter=False, ax=g.ax_joint)将呈现此图:

情节1b

enter image description here

这正是我想要完成的事情。

但是,当我在某些现实世界数据中使用相同的代码时,我在右边距分布图中得到了一些非常奇怪的结果。我们只打电话给A和B两个系列。

代码2

A = pd.Series([2197.0,2207.0,2016.0,1993.0,2126.0,2507.0,3123.0,3632.0,3504.0,3515.0,3394.0,3222.0,3167.0,3071.0,2847.0,2776.0,2878.0,2946.0,3051.0,3021.0,2983.0,3044.0,2951.0,2781.0,2434.0])
B = pd.Series([34.0,159.0,-48.0,-134.0,-229.0,-73.0,31.0,-65.0,261.0,616.0,481.0,544.0,360.0,414.0,359.0,142.0,117.0,173.0,115.0,-36.0,-15.0,105.0,316.0,-30.0,-137.0])
g = sns.jointplot(A, B, kind="kde", size=7, space=0)
sns.regplot(A,B, scatter=False, ax=g.ax_joint)

Plot 2

enter image description here

我认为这本身就很奇怪,因为B系列的属性无法解释这个结果。您可以通过更改系列的顺序来验证这一点:

代码3

g = sns.jointplot(B, A, kind="kde", size=7, space=0)
sns.regplot(B, A, scatter=False, ax=g.ax_joint)

剧情3

enter image description here

正如您所看到的,它仍然是右边缘的分布图,这是问题,而不是数据本身。只需仔细检查,您就可以看到通过注释sns.regplot(B, A, scatter=False, ax=g.ax_joint)并再次运行它仍然可以获得正确的边距图:

代码4:

g = sns.jointplot(B, A, kind="kde", size=7, space=0)
# sns.regplot(B, A, scatter=False, ax=g.ax_joint)

剧情4:

enter image description here

奇怪,对吗?但如果再次运行整个事情,它会变得更加奇怪,但这次将kind = 'kde'替换为kind = 'reg'

代码5:

g = sns.jointplot(B, A, kind="reg", size=7, space=0)
sns.regplot(B, A, scatter=False, ax=g.ax_joint)

情节5:

enter image description here

正如您所看到的,现在正确的边距图正好在它应该是的位置。 我也在讨论其他可能的解决方案,但我认为这些解决方案的问题非常清楚。那么,有关如何解决此问题的任何建议吗?

谢谢!

修改

系统信息:

Windows 7,64位

Python 3.6.0

Matplotlib 2.0.0

Seaborn 0.7.1

IPython 5.1.0

0 个答案:

没有答案