在 python 中绘制正态曲线

Drawing a normal curve in python

我在 python 中看到了很多关于正态分布和曲线绘制的文档,我对此有点困惑,我已经生成了平均值为 30 和标准偏差为 3.7 的正态随机变量,并使用函数norm.dist 我估计了 pdf 函数

=NORM.DIST(A2,$H,$I,FALSE)

根据这个公式画散点图得到

出于演示目的,我想使用 python 绘制相同的草图,我找到了 scipy 和 numpy 版本,请帮我澄清一下,这是我的一些数字

我试过下面的代码

from scipy.stats import norm
import  pandas as pd
import matplotlib.pyplot as plt
data_random =pd.read_excel("data_for_normal.xlsx")
data_values =data_random["NormalVariables"].values
pdf_values =norm.pdf(data_values,30,3.7)
plt.plot(data_values,pdf_values)
plt.title("normal curve")
plt.xlabel("x values")
plt.ylabel("probability density function")
plt.show()

但我有

结果:

print(data_random.head(10))
 NormalVariables
0        29.214494
1        30.170595
2        36.014144
3        30.388626
4        28.398749
5        24.861042
6        29.519316
7        24.207164
8        35.779376
9        26.042977
# plt.plot connects datapoints with lines:

x = [0,1,2]
y = [1,4,3]
plt.plot(x,y)

#note that lines are drawn between adjacent elements in the list,
#so a line from (0,1) to (1,4) and then to (2,3)

# if the order of the datapoints is changed, the position of the datapoints 
# remains unchanged, but now lines are drawn between different points

x = [2,0,1]
y = [3,1,4]
plt.plot(x,y)

所以你在你的图中看到所有交叉的原因是你绘制了未排序的数据。

如果您只想复制 excel 的情节,请改用 plt.scatter。该图仅绘制数据点,不绘制它们之间的联系。

x = [2,0,1]
y = [3,1,4]
plt.scatter(x,y)