使用Seaborn和SciPy的分位数 - 分位数图

Har*_*rvs 4 normal-distribution matplotlib scipy python-3.x seaborn

谁能给我一个方法在Seaborn 做一个qq情节作为数据正常性的测试?或者失败,至少在matplotlib中.

提前致谢

Imp*_*est 10

在阅读维基百科文章后,我了解到QQ图是两个分布相对于彼此的分位数的图.

numpy.percentile允许获得分布的百分位数.因此,您可以调用numpy.percentile每个分布并相互映射结果.

import numpy as np
import matplotlib.pyplot as plt

a = np.random.normal(5,5,250)
b = np.random.rayleigh(5,250)

percs = np.linspace(0,100,21)
qn_a = np.percentile(a, percs)
qn_b = np.percentile(b, percs)

plt.plot(qn_a,qn_b, ls="", marker="o")

x = np.linspace(np.min((qn_a.min(),qn_b.min())), np.max((qn_a.max(),qn_b.max())))
plt.plot(x,x, color="k", ls="--")

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


leo*_*ato 5

Statsmodels.api具有用于此作业的绘图仪。

签出sm.qqplot()sm文档

这是使用与以上相同数据的几个示例。

import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm

 a = np.random.normal(5,5,250)
 sm.qqplot(a)
 plt.show()
Run Code Online (Sandbox Code Playgroud)

因此,我不会发布图片。所以尝试一下。此图显示了相对于正态分布绘制的正态分布,该正态分布导致直线(漂亮的直线)。

b = np.random.rayleigh(5,250)
sm.qqplot(b)
Run Code Online (Sandbox Code Playgroud)

此图显示了相对于法线距离绘制的罗利距离。结果是曲线略凹。


Ing*_*ngo 5

我不确定这是否仍然是最近的,但是我注意到,这两个答案都没有真正解决这个问题,该问题询问如何使用scipy和seaborn进行qq-plots,但未提及statsmodels。实际上,qq-plots在scipy中的名称为probplot:

from scipy import stats
import seaborn as sns
stats.probplot(x, plot=sns.mpl.pyplot)
Run Code Online (Sandbox Code Playgroud)

probplot的plot参数可以是具有plot方法和text方法的任何东西。Probplot在支持的理论分布类型方面也非常灵活。

  • 如文档中所述,这会生成一个“概率图”,它不是 qq 图 (3认同)