【问题标题】:Plot PDF of Pareto distribution in Python在 Python 中绘制帕累托分布的 PDF
【发布时间】:2021-06-26 21:06:05
【问题描述】:

我有一个特定的Pareto distribution。例如,

Pareto(beta=0.00317985, alpha=0.147365, gamma=1.0283)

我从this answer 获得的,现在我想在matplotlib 中绘制其概率密度函数 (PDF) 的图表。所以我相信x轴都是正实数,y轴也是一样的。

我如何才能获得适当的 PDF 信息并绘制它? 以编程方式获取数学 PDF 函数或坐标是此问题的要求。


更新:

drawPDF 方法返回一个包含 PDF 坐标的 Graph 对象。但是,我不知道如何以编程方式访问这些坐标。我当然不想将对象转换为字符串,也不想使用正则表达式来提取信息:

In [45]: pdfg = distribution.drawPDF()

In [46]: pdfg
Out[46]: class=Graph name=pdf as a function of X0 implementation=class=GraphImplementation name=pdf as a function of X0 title= xTitle=X0 yTitle=PDF axes=ON grid=ON legendposition=topright legendFontSize=1
 drawables=[class=Drawable name=Unnamed implementation=class=Curve name=Unnamed derived from class=DrawableImplementation name=Unnamed legend=X0 PDF data=class=Sample name=Unnamed implementation=class=Sam
pleImplementation name=Unnamed size=129 dimension=2 data=[[-1610.7,0],[-1575.83,0],[-1540.96,0],[-1506.09,0],[-1471.22,0],[-1436.35,0],[-1401.48,0],[-1366.61,0],...,[-1331.7,6.95394e-06],[2852.57,6.85646e-06]] color
=red fillStyle=solid lineStyle=solid pointStyle=none lineWidth=2]

【问题讨论】:

  • Jean A. 在您分享的帖子中的回答绘制了 PDF,这是您要找的吗?
  • 在 scipy 的 scipy.stats.pareto 中查找名为“显示概率密度函数 (pdf):”的示例代码。他们在第 1 和第 99 个百分位数之间使用 linspace。
  • @TYZ 不,该方法不使用matplotlib。我想获得 PDF 的实际功能或坐标,然后将它们输入到我选择的绘图软件中。
  • @TYZ 感谢您的提问!您已经表明我的问题不清楚。
  • @mareoraft 这行得通吗? docs.scipy.org/doc/scipy/reference/generated/…

标签: python python-3.x matplotlib openturns


【解决方案1】:

我假设您要执行不同的任务:

  1. 绘制 PDF
  2. 在单点计算 PDF
  3. 计算一系列值的 PDF

这些需求中的每一个都需要不同的脚本。请让我详细说明。

我首先创建Pareto 分布:

import openturns as ot
import numpy as np
beta = 0.00317985
alpha = 0.147365
gamma = 1.0283
distribution = ot.Pareto(beta, alpha, gamma)
print("distribution", distribution)

要绘制 PDF,请使用 drawPDF() 方法。这将创建一个ot.Graph,可以直接在 Jupyter Notebook 或 IPython 中查看。我们可以用View强制创建情节:

import openturns.viewer as otv
graph = distribution.drawPDF()
otv.View(graph)

这个情节:

要计算单个点的 PDF,请使用 computePDF(x),其中 xot.Point()。这也可以是 Python listtuple 或 1D numpy array,因为转换由 OpenTURNS 自动管理:

x = 500.0
y = distribution.computePDF(x)
print("y=", y)

之前的脚本打印:

y= 5.0659235352823877e-05

要计算一系列值的 PDF,我们可以使用 computePDF(x),其中 x 是 ot.Sample()。这也可以是 Python list 列表或 2D numpy array,因为转换由 OpenTURNS 自动管理。

x = ot.Sample([[v] for v in np.linspace(0.0, 1000.0)])
y = distribution.computePDF(x)
print("y=", y)

之前的脚本打印:

y= 
 0 : [ 0           ]
 1 : [ 0.00210511  ]
 [...]
 49 : [ 2.28431e-05 ]

【讨论】:

  • 感谢您的回答!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-15
  • 1970-01-01
  • 2021-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多