将非normpdf拟合到matplotlib中的直方图

时间:2013-12-13 18:06:01

标签: python matplotlib scipy

我正试图对直方图进行拟合,但没有任何运气。有很多关于如何在普通概率密度函数中执行此操作的信息,而不是其他类型的pdf信息。

import pylab as py
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import exponpow

# Fit procedure
eigfit=[]
for i in range(0,len(eigenvals1)):
if eigenvals1>=4.3:
    eigfit.append(eigenvals1[i])

b = exponpow.fit(eigfit)

但是我找不到如何绘制这个指数pdf的曲线。它给出了一些适合的值,但是在scipy docs中,没有很好地解释它是如何适合的。

1 个答案:

答案 0 :(得分:4)

fit方法执行maximum likelihood estimation个参数。

要拟合exponpow分布,您可能希望location参数(所有scipy分布都有)为0.还有另外两个参数:scale参数和shape参数。以下是使用exponpow.fit的示例(在ipython会话中),其中location参数固定为0:

首先生成一些假数据:

In [108]: np.random.seed(123)

In [109]: samples = 5 + np.random.randn(1000)

使用exponpow.fit使参数适合数据。使用floc=0将location参数修复为0:

In [110]: params = exponpow.fit(samples, floc=0)

使用matplotlib.pyplot.hist

绘制样本的直方图
In [111]: histresult = hist(samples, normed=True, facecolor='cyan', alpha=0.25)

使用exponpow.pdf方法

绘制拟合分布的PDF
In [112]: x = np.linspace(0, samples.max() + 1, 100)

In [113]: pdf = exponpow.pdf(x, *params)

In [114]: plot(x, pdf, 'b-', linewidth=2)
Out[114]: [<matplotlib.lines.Line2D at 0x5b59b90>]

这些是拟合参数(形状,位置,比例)的值:

In [115]: params
Out[115]: (3.5192555959521199, 0, 6.078044809594477)

plot