Python 等同于 MATLAB 的 normplot?

标签 python numpy matplotlib scipy probability

是否有类似于 MATLAB 中的 normplot 的 python 等效函数? 也许在 matplotlib 中?

MATLAB 语法:

x = normrnd(10,1,25,1);
normplot(x)

给予:

enter image description here

我曾尝试使用 matplotlib 和 numpy 模块来确定数组中值的概率/百分位数,但与 MATLAB 中的图相比,输出图的 y 轴刻度是线性的。

import numpy as np
import matplotlib.pyplot as plt

data =[-11.83,-8.53,-2.86,-6.49,-7.53,-9.74,-9.44,-3.58,-6.68,-13.26,-4.52]
plot_percentiles = range(0, 110, 10) 

x = np.percentile(data, plot_percentiles)
plt.plot(x, plot_percentiles, 'ro-')
plt.xlabel('Value')
plt.ylabel('Probability')  
plt.show() 

给出: enter image description here

否则,如何像第一个图中那样调整比例?

谢谢。

最佳答案

迟到的答案,但我刚遇到同样的问题并找到了解决方案,值得分享。我猜。

正如 joris 所指出的,probplot 函数等效于 normplot,但生成的分布采用累积密度函数的形式。 Scipy.stats 还提供了一个函数来转换这些值。

cdf -> 百分位数

stats.'distribution function'.cdf(cdf_value)

百分位数 -> cdf

stats.'distribution function'.ppf(percentile_value)

例如:

stats.norm.ppf(percentile)

要获得等效的 y 轴,如 normplot,您可以替换 cdf-ticks:

from scipy import stats
import matplotlib.pyplot as plt

nsample=500

#create list of random variables
x=stats.t.rvs(100, size=nsample)

# Calculate quantiles and least-square-fit curve
(quantiles, values), (slope, intercept, r) = stats.probplot(x, dist='norm')

#plot results
plt.plot(values, quantiles,'ob')
plt.plot(quantiles * slope + intercept, quantiles, 'r')

#define ticks
ticks_perc=[1, 5, 10, 20, 50, 80, 90, 95, 99]

#transfrom them from precentile to cumulative density
ticks_quan=[stats.norm.ppf(i/100.) for i in ticks_perc]

#assign new ticks
plt.yticks(ticks_quan,ticks_perc)

#show plot
plt.grid()
plt.show()

结果:

probability plot with matplotlib

关于Python 等同于 MATLAB 的 normplot?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6382612/

相关文章:

python - 如何让 FigureCanvasTkAgg 与 Scrollbar 一起工作

python - 从前端使用 django 身份验证登录

python - 图中的奇怪线条/伪影

python - 在cygwin中安装obspy

python - 计算范围内的出现次数

python - 如何使用 numpy 将数组中的任意两个元素相加并生成矩阵?

python - python 中 numpy 数组的 len()

python - AxesSubplot 没有属性 xticks

python - 删除 Pandas 数据框行中的最高值和最低值

python - 如何使用 python 表?