有没有人可以告诉我如何在Seaborn中进行qq图,作为测试数据正态性的方法?如果不行,至少在matplotlib中能不能做到。
先谢谢了。
有没有人可以告诉我如何在Seaborn中进行qq图,作为测试数据正态性的方法?如果不行,至少在matplotlib中能不能做到。
先谢谢了。
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()
使用与上面相同的数据,此示例显示了绘制在正态分布上的正态分布,结果是相当直的线:
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()
该示例展示了一张瑞利分布与正态分布对比绘制的图表,呈现出略微凹陷的曲线:
a = np.random.rayleigh(5, 250)
sm.qqplot(a)
plt.show()
我不确定这是否仍然是最新的,但我注意到两个答案都没有真正回答这个问题,它询问如何使用scipy和seaborn进行qq图,但没有提到statsmodels。实际上,scipy中可以使用probplot函数来制作qq图:
from scipy import stats
import seaborn as sns
stats.probplot(x, plot=sns.mpl.pyplot)
probplot的plot参数可以是任何具有plot方法和text方法的对象。probplot对支持的理论分布类型也非常灵活。dist='norm'
是默认设置。因此这更加简洁一些。指定plot=sns.mpl.pyplot
是因为@Harvs要求使用seaborn来获取这些图形。 - Ingopip install seaborn-qqplot
在我的虚拟环境中。导入代码行:
from seaborn_qqplot import pplot
未被识别。
通过(PyCharm的命令):文件 -> 设置 -> 项目 -> Python解释器 -> +(安装),我可以从seaborn_qqplot中导入pplot,并创建一个分位数-分位数图。