Python 从Seaborn正则图中提取均值和置信区间

Python 从Seaborn正则图中提取均值和置信区间,python,matplotlib,seaborn,Python,Matplotlib,Seaborn,鉴于regplot以区间和引导计算平均值,以找到每个箱子的置信区间,因此必须手动重新计算它们以进行进一步研究似乎是一种浪费,因此: 问题:如何获取正则图的计算平均值和置信区间 示例:此代码生成了一个漂亮的带有CI的bin平均值绘图: import numpy as np import seaborn as sns import matplotlib.pyplot as plt # just some random numbers to get started fig, ax = plt.sub

鉴于regplot以区间和引导计算平均值,以找到每个箱子的置信区间,因此必须手动重新计算它们以进行进一步研究似乎是一种浪费,因此:

问题:如何获取正则图的计算平均值和置信区间

示例:此代码生成了一个漂亮的带有CI的bin平均值绘图:

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

# just some random numbers to get started
fig, ax = plt.subplots()
x = np.random.uniform(-2, 2, 1000)
y = np.random.normal(x**2, np.abs(x) + 1)

# Manual binning to retain control
binwidth=4./10
x_bins=np.arange(-2+binwidth/2,2,binwidth)
sns.regplot(x=x, y=y, x_bins=x_bins, fit_reg=None)
plt.show()
结果:

并不是说逐箱计算平均值不容易,而是CI是使用随机数计算的。如果可以访问与所绘制的数字完全相同的数字就好了,那么如何访问它们呢?我一定忽略了某种获取方法。

设置 在MWE中设置为:

将numpy导入为np
导入seaborn作为sns
将matplotlib.pyplot作为plt导入
#绘图用随机数
x=np.随机均匀(-2,2,1000)
y=np随机正态(x**2,np绝对值(x)+1)
#手动装箱以保持控制
宽度=4/10
x_bins=np.arange(binwidth/2-2,2,binwidth)
sns.regplot(x=x,y=y,x_-bins=x_-bins,fit_-reg=None)
这使我们的出发点如下:

置信区间的提取 我们可以通过在绘制线上循环并提取最小值和最大值(分别对应于上CI和下CI)来提取置信区间:

ax=plt.gca()
lower=[line.getydata().min()表示ax.lines中的行]
上限=[line.getydata().max()表示ax.lines中的行]
作为一项健全性检查,我们可以在原始数据的顶部绘制这些提取的点(此处用红色十字表示):

plt.scatter(x_-bin,下部,marker='x',color='C3',zorder=3)
plt.散射(x_箱,上部,标记='x',颜色='C3',zorder=3)

提取手段 平均值可从
ax.集合中提取,如下所示:

means=ax.collections[0]。获取偏移量()[:,1]
同样,作为一种合理性检查,我们可以将提取的值覆盖在原始绘图上:

plt.scatter(x_bins,means,color='C1',marker='x',zorder=3)

太棒了。非常感谢。你是否有一个类似的接近一个线性来提取数据点本身,还是我应该继续并重新计算平均值?请参阅我关于提取平均值的编辑。耶!谢谢