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)
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)
此图显示了相对于法线距离绘制的罗利距离。结果是曲线略凹。
我不确定这是否仍然是最近的,但是我注意到,这两个答案都没有真正解决这个问题,该问题询问如何使用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在支持的理论分布类型方面也非常灵活。
| 归档时间: |
|
| 查看次数: |
7942 次 |
| 最近记录: |