对一维数据拟合正态分布

我有一个一维数组。我可以计算这个样本的“均值”和“标准差”,然后绘制出“正态分布”,但我有一个问题:

我想在同一个图中绘制数据和正态分布。

我不知道如何绘制数据和正态分布图。

关于“ scipy.stats 中的高斯概率密度函数”有什么想法吗?

s = np.std(array)
m = np.mean(array)
plt.plot(norm.pdf(array,m,s))
169038 次浏览

要看到正态分布和实际数据,你应该将数据绘制成直方图,然后在上面画出概率密度函数。请看下面的例子 Https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.random.normal.html 如何做到这一点。

您可以使用 matplotlib绘制直方图和 PDF (如@MrE 答案中的链接所示)。为了适应和计算 PDF,您可以使用 scipy.stats.norm,如下所示。

import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt




# Generate some data for this demonstration.
data = norm.rvs(10.0, 2.5, size=500)


# Fit a normal distribution to the data:
mu, std = norm.fit(data)


# Plot the histogram.
plt.hist(data, bins=25, density=True, alpha=0.6, color='g')


# Plot the PDF.
xmin, xmax = plt.xlim()
x = np.linspace(xmin, xmax, 100)
p = norm.pdf(x, mu, std)
plt.plot(x, p, 'k', linewidth=2)
title = "Fit results: mu = %.2f,  std = %.2f" % (mu, std)
plt.title(title)


plt.show()

下面是剧本生成的情节:

Plot

使用 海运有一种更简单的方法:

import seaborn as sns
from scipy.stats import norm


data = norm.rvs(5,0.4,size=1000) # you can use a pandas series or a list if you want


sns.distplot(data)
plt.show()

产出:

enter image description here

更多信息 : < a href = “ https://seabon.pydata.org/generated/seabon.distplot.html”rel = “ nofollow norefrer”> seabon.distplot

使用 seaborn(< = 0.11.2)的一个简单替代方法:

import numpy as np
import seaborn as sns
from scipy.stats import norm


# Generate simulated data
n_samples = 100
rng = np.random.RandomState(0)
data = rng.standard_normal(n_samples)


# Fit Gaussian distribution and plot
sns.distplot(data, fit=norm, kde=False)