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()
我是 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()