将正态分布拟合为1D数据

时间:2013-11-15 21:43:38

标签: python numpy matplotlib scipy

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

我想在下图中绘制数据和正态分布:

我不知道如何绘制“数据”和“正态分布”

关于“scipy.stats中的高斯概率密度函数”的任何想法?

s = np.std(array)
m = np.mean(array)
plt.plot(norm.pdf(array,m,s))

4 个答案:

答案 0 :(得分:75)

您可以使用matplotlib绘制直方图和PDF(如@ErE答案中的链接)。对于拟合和计算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

答案 1 :(得分:3)

要查看正态分布和实际数据,您应将数据绘制为直方图,然后绘制概率密度函数。有关如何执行此操作,请参阅http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.normal.html上的示例。

答案 2 :(得分:0)

有一种使用 seaborn 的简单方法:

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)

output:

enter image description here

了解更多信息seaborn.distplot

答案 3 :(得分:0)

此处您不符合正态分布。用git commit替换sns.distplot(data)应该可以解决问题。