在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]);
这创造了这个:
所以第一个参数基本上“初始化”斌 – 我特别创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
。