Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Matplotlib直方图未正确计算每个存储箱中的值数_Python_Matplotlib_Histogram - Fatal编程技术网

Python Matplotlib直方图未正确计算每个存储箱中的值数

Python Matplotlib直方图未正确计算每个存储箱中的值数,python,matplotlib,histogram,Python,Matplotlib,Histogram,我试图用matplotlib.pyplot.hist制作一个非常简单的直方图,但它似乎没有正确地计算每个箱子中的值的数量。这是我的密码: import numpy as np import matplotlib.pyplot as plt plt.hist([.2,.3,.5,.6],bins=np.arange(0,1.1,.1)) 我将间隔[0,1]除以宽度为.1的桶,因此应该得到四个高度为1的条。但是输出数据只包含两个高度为2的条:它将.3值作为[.2、.3)bi

我试图用matplotlib.pyplot.hist制作一个非常简单的直方图,但它似乎没有正确地计算每个箱子中的值的数量。这是我的密码:

    import numpy as np
    import matplotlib.pyplot as plt
    plt.hist([.2,.3,.5,.6],bins=np.arange(0,1.1,.1))
我将间隔[0,1]除以宽度为.1的桶,因此应该得到四个高度为1的条。但是输出数据只包含两个高度为2的条:它将.3值作为[.2、.3)bin的一部分进行计数,同样,它将.6值作为[.5、.6)bin的一部分进行计数。我在Spyder和Google Colab上都试过了。有人知道发生了什么吗?谢谢!

来自:

如果料仓是一个序列,则定义料仓边缘,包括第一个料仓的左边缘和最后一个料仓的右边缘;在这种情况下,料仓的间距可能不相等。除最后一个(最右侧)料仓外,所有料仓都是半开的。换句话说,如果料仓是:

[1,2,3,4]

然后第一个箱子是[1,2](包括1,但不包括2),第二个箱子是[2,3]。然而,最后一个箱子是[3,4],其中包括4

由于间隔是关闭-打开的,因此.2和.3都落在同一个箱子中,而.5和.6落在另一个箱子中


您应该通过稍微移动边界来修复存储箱,以避免数字落在边缘上。

问题在于,值正好落在存储箱的边界上。可以将它们放在上一个存储箱或下一个存储箱中。您需要在数据点之间精确地设置存储箱边界。请注意,matplotlib的直方图主要用于r连续分布,其中浮点舍入没有如此大的影响

下面是一些代码来说明这两种情况下发生的情况:

将numpy导入为np
将matplotlib.pyplot作为plt导入
数据=[.2,3,5,6]
图,轴=plt.子批次(ncols=2,figsize=(12,4))
对于轴中的ax:
如果ax==轴[0]:
宾斯=np.arange(0,1.1,1)
ax.set_title(‘箱子边界上的数据’)
其他:
垃圾箱=np.arange(-0.05,1.1,1)
ax.set_title('箱子边界之间的数据')
值,bin_界限,条=ax.hist(数据,bin=bin,alpha=0.3)
ax.vlines(bin_界限,0,最大值,color='crimson',ls='':')
最大散点(数据,np.full_-like(数据,0.5),颜色=石灰,s=30)
ax.set_ylim(0,2.2)
ax.设置锁定(范围(3))
plt.show()

问题在于,值正好落在存储单元的边界上。浮点舍入可以将它们放在上一个存储单元或下一个存储单元中。您需要
plt.hist([.2、.3、.5、.6],存储单元=np.arange(-0.05,1.1、.1))
用于分隔良好的存储箱。请注意,matplotlib的直方图主要用于浮点舍入没有太大影响的连续分布。谢谢,但您所说的不正确:正是因为间隔是半开的,在我的设置中。2和.3不属于同一个存储箱。正如JohanC指出的,t我的问题的根源是浮点舍入。