如何用 Python 创建指数概率论文

我现在正在尝试用python重新创建这个指数概率论文的图表。

为了做到这一点,我必须将 CDF 函数线性化为:

x = a*g(Fx(x)) + b

然后绘制xvs g(Fx(x))

该图显示了不同分布的参数

但是我不知道如何继续。显然 x 轴的比例必须改变。我已经尝试过使用 probplot,但结果完全相同。

有任何想法吗?

import matplotlib.pyplot as plt

import numpy as np

from scipy.stats import expon

from scipy.stats import probplot


# Creating plot


fig,ax =plt.subplots()

newax=ax.twiny()

ax.grid()


# Lognormal


lambda_expon=0.04

i=1/lambda_expon


probs=np.arange(0.01,0.99,0.01) # array with probabilities


ppf =expon.ppf(probs,i) 

cdf=expon.cdf(ppf,i) 

x=-np.log(1-cdf) # variable

y=-np.log(1-cdf)*i # linearized form CDF


ax.plot(x,y)

newax.set_xticks([0.01,0.5,0.8,0.9,0.96,0.99])

newax.set_xticks([0.01,0.5,0.90,0.99])


ax.plot()


四季花海
浏览 47回答 1
1回答

吃鸡游戏

不确定,为什么你认为这是 CDF 图。如果在 X 轴上放置概率,在 Y 轴上绘制x,它看起来像分位数图。我没有在 Python/Matplotlib 中看到内置的此类比例,logit看起来像是最佳近似值。或者我误解了你的问题?代码,Python 3.8 x64 Win10import numpy as npimport matplotlib.pyplot as plt# exponential distributiondef PDF(x, λ):    return λ*np.exp(-λ*x)def CDF(x, λ):    return 1.0 - np.exp(-λ*x)def Q(p, λ): # quantile    x = -np.log(1.0 - p)/λ    return x# plotsλ = 0.04p = np.linspace(0.01, 0.99, 101)x = Q(p, λ)fig = plt.figure()ax  = fig.add_subplot(2, 1, 1)ax.set_xscale('logit')ax.plot(p, x, 'r-')plt.show()你会得到类似的东西更新如果您需要概率图,这里是代码from scipy.stats import exponrve = expon(loc=0.0, scale=1.0/λ)p = np.linspace(0.01, 0.99, 101)x = rve.ppf(p) #  Q(p, λ)q = rve.rvs(size = 10000)fig = plt.figure()ax  = fig.add_subplot(2, 1, 1)   res = stats.probplot(q, dist=rve, plot=ax)plt.show()和图表好吧,当你发送消息时我已经写好了代码。无论如何将其放置在这里,它看起来与您询问的图表完全相同 - 与自定义标签呈线性。import matplotlib.ticker as tickerdef linear(x0, xn, y0, yn, x):    q = (x-x0)/(xn-x0)    return q * yn + (1.0 - q) * y0pmin = 0.009pmax = 0.991xmin = Q(pmin, λ)xmax = Q(pmax, λ)x = np.linspace(xmin, xmax, 2)p = np.linspace(pmin, pmax, 2)tick_values = [0.01, 0.50, 0.80, 0.90, 0.96, 0.99] # probabiliestick_names  = [str(v) for v in tick_values] # ticks to place on graphtick_xvals  = [Q(p, λ) for p in tick_values] # x values for each ptick_places = [linear(xmin, xmax, pmin, pmax, x) for x in tick_xvals] # x from linear functionfig = plt.figure()ax  = fig.add_subplot(2, 1, 1)ax.axes.xaxis.set_major_locator(ticker.FixedLocator((tick_places)))ax.xaxis.set_major_formatter(ticker.FixedFormatter((tick_names)))ax.plot(p, x, 'r-')plt.show()和图表本身
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python