直方图错过了matplotlib中的值,bug?

时间:2018-04-19 09:50:23

标签: python matplotlib

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),则该图看起来合理,但由于更精细的分级,它具有空白空间。

enter image description here

1 个答案:

答案 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)

enter image description here

如果您想知道在为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())。