bins=np.arange(0,1,0.1)
discrete_pdf=np.power(bins,1.5)
discrete_pdf=discrete_pdf/np.sum(discrete_pdf)
print(bins)
print(discrete_pdf)
print(np.sum(discrete_pdf))
plt.plot(bins,discrete_pdf)
plt.show()
values=np.random.choice(bins, 100000, p=discrete_pdf)
plt.hist(values,10)
plt.show()
我无法使用hist
或者是"功能" / bug?
如果您将hist函数强制为男性10 * n个bin(例如20或100),则该图看起来合理,但由于更精细的分级,它具有空白空间。
答案 0 :(得分:1)
这是因为您让matplotlib使用plt.hist(values,10)
自动为您确定垃圾箱,因为第二个参数是垃圾箱的数量。如果我们查看matplotlib生成的自动箱,其值为10
,它们是:
[0.1 0.18 0.26 0.34 0.42 0.5 0.58 0.66 0.74 0.82 0.9 ]
您可以传入自定义分箱,而不是让matplotlib自动决定它们。因此,解决方案是传入一个列表({1}}的列表(或数组),注意到最后添加了一个额外的bin。
plotting_bins = np.arange(0,1.1,1)
如果您想知道在为bin参数提供整数时如何创建自动bin,我们可以查看numpy.histogram()
的文档(这是import numpy as np
import matplotlib.pyplot as plt
bins=np.arange(0,1,0.1)
discrete_pdf=np.power(bins,1.5)
discrete_pdf=discrete_pdf/np.sum(discrete_pdf)
values=np.random.choice(bins, 100000, p=discrete_pdf)
plotting_bins=np.arange(0,1.1,0.1) # need to add an extra bin when plotting
fig, (ax1,ax2) = plt.subplots(1,2,figsize=(6,4))
ax1.hist(values, 10)
ax1.set_title("Automatic bins")
ax2.hist(values, bins=plotting_bins)
ax2.set_title("Manual bins")
ax1.set_xlim(0,1)
ax2.set_xlim(0,1)
plt.tight_layout()
plt.show()
使用的场景):
bins :int或scalars或str的序列,可选
如果bin是int,则它定义给定范围内等宽bin的数量
和
范围 :(浮动,浮动),可选
垃圾箱的下部和上部范围。如果没有提供,范围只是(a.min(),a.max())。