使用SciPy的分位数分位数图

你将如何使用Python创build一个qq图?

假设您有一大组测量值并正在使用一些以XY值作为input的绘图函数。 这个函数应该把测量的分位数与相应的分布(正常的,统一的)的分位数进行比较。

由此产生的情节让我们接着评估我们的测量是否遵循假定的分布。

http://en.wikipedia.org/wiki/Quantile-quantile_plot

R和Matlab都为此提供了现成的函数,但是我想知道在Python中实现的最干净的方法是什么。

6 Solutions collect form web for “使用SciPy的分位数分位数图”

我认为, scipy.stats.probplot将做你想做的。 请参阅文档以获取更多细节。

 import numpy as np import pylab import scipy.stats as stats measurements = np.random.normal(loc = 20, scale = 5, size=100) stats.probplot(measurements, dist="norm", plot=pylab) pylab.show() 

结果

在这里输入图像说明

使用qqplotstatsmodels.api是另一种select:

非常基本的例子:

 import numpy as np import statsmodels.api as sm import pylab test = np.random.normal(0,1, 1000) sm.qqplot(test, line='45') pylab.show() 

结果:

在这里输入图像说明

文档和更多的例子在这里

如果你需要做一个样本与另一个样本的QQ图,statsmodels包含qqplot_2samples()。 像上面评论中的Ricky Robinson一样,我认为这是一个QQ图,而概率图是一个与理论分布相对的样本。

http://statsmodels.sourceforge.net/devel/generated/statsmodels.graphics.gofplots.qqplot_2samples.html

我想出了这个。 也许你可以改进它。 特别是生成分布的分位数的方法对我来说似乎很麻烦。

你可以用np.random.normal中的任何其他分布replacenp.random.normal来比较其他分布的数据。

 #!/bin/python import numpy as np measurements = np.random.normal(loc = 20, scale = 5, size=100000) def qq_plot(data, sample_size): qq = np.ones([sample_size, 2]) np.random.shuffle(data) qq[:, 0] = np.sort(data[0:sample_size]) qq[:, 1] = np.sort(np.random.normal(size = sample_size)) return qq print qq_plot(measurements, 1000) 

你可以使用散景

 from bokeh.plotting import figure, show from scipy.stats import probplot # pd_series is the series you want to plot series1 = probplot(pd_series, dist="norm") p1 = figure(title="Normal QQ-Plot", background_fill_color="#E8DDCB") p1.scatter(series1[0][0],series1[0][1], fill_color="red") show(p1) 
  • 在SciPy中创build低通滤波器 - 理解方法和单位
  • 重新采样表示图像的numpy数组
  • scipy.misc模块没有属性imread?
  • matplotlib - 从等高线中提取数据
  • Python SciPy是否需要BLAS?
  • Pandas中的T-testing(Python)
  • Python中的均方根误差
  • 用NumPy快速旋转张量
  • scipy:savefig没有框架,轴,只有内容
  • 移动平均线或平均线
  • Scipy稀疏...数组?