A post提供了一些绘制此图的代码
import scipy.stats as ss
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(-10, 11)
xU, xL = x + 0.5, x - 0.5
prob = ss.norm.cdf(xU, scale = 3) - ss.norm.cdf(xL, scale = 3)
prob = prob / prob.sum() #normalize the probabilities so their sum is 1
nums = np.random.choice(x, size = 10000, p = prob)
plt.hist(nums, bins = len(x))
我修改了这一行
x = np.arange(-10, 11)
此行
x = np.arange(10, 31)
我有这个数字
该如何解决?
答案 0 :(得分:0)
考虑到您要Python执行的操作,此图中没有错误:它是从正态分布的尾部(取整为10到31之间的任何值)的10,000个样本的直方图,均值为0,标准差为3 。由于概率在法线的尾部急剧下降,因此发生10,000的概率都没有超过17,这就是为什么您没有将最大范围提高到31的原因。
如果只希望绘图的x轴覆盖您的整个预期范围,则可以在plt.xlim(9.5, 31.5)
之后添加plt.hist
。
如果您希望直方图在整个范围内都具有支持,则需要调整分布的均值和/或方差。例如,如果您指定在获得prob
时正态分布的平均值为20,而不是平均值为
prob = ss.norm.cdf(xU, loc=20, scale=3) - ss.norm.cdf(xL, loc=20, scale=3)
然后,您将恢复外观相似的直方图,将其向右平移20。