在Matplotlib中的Bin大小(直方图)

我正在使用matplotlib做直方图。

基本上,我想知道是否有任何方法来手动设置垃圾箱的大小,而不是垃圾箱的数量。

任何有任何想法的人都非常感激。

谢谢

实际上,这很容易:你可以用bin边界来给出一个列表,而不是bin的数量。 它们也可以不均匀分布:

plt.hist(data, bins=[0, 10, 20, 30, 40, 50, 100]) 

如果你只是希望他们平均分配,你可以简单地使用范围:

 plt.hist(data, bins=range(min(data), max(data) + binwidth, binwidth)) 

添加到原来的答案

上面的行适用于只填充整数的data 。 正如macrocosme指出的那样,对于浮动,你可以使用:

 import numpy as np plt.hist(data, bins=np.arange(min(data), max(data) + binwidth, binwidth)) 

对于N个容器,容器边缘由N + 1个值列表指定,其中前N个给出下部容器边缘,+1给出最后一个容器的上边缘。

码:

 from numpy import np; from pylab import * bin_size = 0.1; min_edge = 0; max_edge = 2.5 N = (max_edge-min_edge)/bin_size; Nplus1 = N + 1 bin_list = np.linspace(min_edge, max_edge, Nplus1) 

请注意,linspace产生从min_edge到max_edge的数组,分成N + 1个值或N个bin

我想简单的方法是计算你的数据的最小值和最大值,然后计算L = max - min 。 然后,将L除以期望的纸箱宽度(我假定这是您的纸箱尺寸的意思),并使用此值的上限作为箱的数量。

我和OP有同样的问题(我想!),但我无法像Lastalda指定的那样工作。 我不知道我是否正确地解释了这个问题,但是我find了另一个解决scheme(虽然这可能是一个非常糟糕的方法)。

这是我做到的方式:

plt.hist([1,11,21,31,41], bins=[0,10,20,30,40,50], weights=[10,1,40,33,6]);

这创造了这个:

图像显示在matplotlib中创建的直方图图形

所以第一个参数基本上“初始化”斌 – 我特别创build一个数字,在我设置在箱参数范围之间。

为了certificate这一点,请查看第一个参数([1,11,21,31,41])中的数组和第二个参数([0,10,20,30,40,50])中的“bin”数组) :

  • 数字1(来自第一个数组)落在0和10之间(在“箱”数组中)
  • 数字11(从第一个数组)落在11和20之间(在“箱”arrays中)
  • 21号(来自第一个arrays)在21到30之间(在“箱”arrays中)等等。

然后我使用“权重”参数来定义每个bin的大小。 这是用于权重参数的数组:[10,1,40,33,6]。

所以0到10的bin被赋予10的值,11到20的bin被赋予1的值,21到30的bin被赋予40的值等等。

对于具有整数x值的直方图,我最终使用了

 plt.hist(data, np.arange(min(data)-0.5, max(data)+0.5)) plt.xticks(range(min(data), max(data))) 

0.5的偏移量将x轴上的元素居中。 plt.xticks调用为每个整数添加一个plt.xticks