python: 如何绘制以下函数的折线图?

python: how do I draw a line graph of the following function?

我是 python 的新手,我正在尝试 绘制具有特定均值和方差的 1000 个样本 的正态分布概率图。概率函数是:

我已经生成了 1000 个样本:

import numpy as np
import matplotlib.pyplot as plt

s_mean = 0
s_variance = 0.1
s_std_dev = np.sqrt(s_variance)
s = np.random.normal(s_mean, 100, 1000)

我已经尽可能地遵循了函数:

prob_s = (np.exp(-1*((s-s_mean)**2)/(2*s_variance)))/(np.sqrt(2*np.pi)*s_std_dev)

并使用 matplotlib 绘制图形:

f, (ax1) = plt.subplots(1, figsize=(5, 5))
ax1.hist(prob_s, bins=50, color='r')
plt.show()

但图表与我的预期不符:

我期待的图表如下:

我找不到这里有什么问题。有帮助吗?

那不行。正态分布是特定的,因为它不能用初等函数来表示。我的建议是只使用 scipy.stats

import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as stats
import math

mu = 0
variance = 1
sigma = math.sqrt(variance)
x = np.linspace(mu - 3*sigma, mu + 3*sigma, 100)
plt.plot(x, stats.norm.pdf(x, mu, sigma))
plt.show()

如果您想从这 1000 个样本中提取分布,您应该使用

hist, bins = np.histogram(s, bins=50)
plt.plot(bins[1:], hist)
plt.show()

np.random.normal 需要均值和标准差。然后 s 可以用作直方图的输入。 density=True 将直方图归一化为类似于概率密度函数 (pdf) 的大小,因此面积为 1.

要绘制 pdf 曲线,您可以使用您的函数,使用一些规则间隔的 x 值。

import numpy as np
import matplotlib.pyplot as plt

s_mean = 0
s_variance = 0.1
s_std_dev = np.sqrt(s_variance)
s = np.random.normal(s_mean, s_std_dev, 1000)

fig, ax1 = plt.subplots(figsize=(5, 5))
ax1.hist(s, bins=50, color='crimson', density=True)

x = np.linspace(s.min(), s.max(), 200)
prob_s = (np.exp(-1 * ((x - s_mean) ** 2) / (2 * s_variance))) / (np.sqrt(2 * np.pi) * s_std_dev)
ax1.plot(x, prob_s, color='dodgerblue')

plt.show()