我正在使用matplotlib制作直方图。
基本上,我想知道是否有办法手动设置垃圾箱的大小而不是垃圾箱的数量。
任何有任何想法的人都非常感谢。
由于
答案 0 :(得分:217)
实际上,它非常简单:您可以使用bin边界列出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))
答案 1 :(得分:13)
对于N个bin,bin边缘由N + 1个值列表指定,其中前N个给出较低的bin边缘,+1给出最后一个bin的上边缘。
代码:
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
答案 2 :(得分:4)
我想简单的方法是计算您拥有的数据的最小值和最大值,然后计算L = max - min
。然后将L
除以所需的bin宽度(我假设这是你的bin大小的意思)并使用该值的上限作为bin的数量。
答案 3 :(得分:1)
我和OP有同样的问题(我想!),但我无法按照Lastalda指定的方式工作。我不知道我是否正确地解释了这个问题,但我找到了另一个解决方案(尽管这可能是一个非常糟糕的方法)。
这就是我这样做的方式:
plt.hist([1,11,21,31,41], bins=[0,10,20,30,40,50], weights=[10,1,40,33,6]);
创造了这个:
所以第一个参数基本上是'初始化' bin - 我专门创建一个介于我在bin参数中设置的范围之间的数字。
为了证明这一点,请查看第一个参数([1,11,21,31,41])中的数组和' bins'第二个参数中的数组([0,10,20,30,40,50]):
然后我使用'权重'用于定义每个bin大小的参数。这是用于权重参数的数组:[10,1,40,33,6]。
因此0到10 bin的值为10,11到20 bin的值为1,21到30 bin的值为40,等等。
答案 4 :(得分:0)
I use quantiles to do bins uniform and fitted to sample:
bins=df['Generosity'].quantile([0,.05,0.1,0.15,0.20,0.25,0.3,0.35,0.40,0.45,0.5,0.55,0.6,0.65,0.70,0.75,0.80,0.85,0.90,0.95,1]).to_list()
plt.hist(df['Generosity'], bins=bins, normed=True, alpha=0.5, histtype='stepfilled', color='steelblue', edgecolor='none')
答案 5 :(得分:0)
此答案支持@ macrocosme建议。
我正在使用热图作为hist2d图。另外,我将cmin = 0.5用作无计数值,将cmap用作颜色,r代表给定颜色的反色。
# np.arange(data.min(), data.max()+binwidth, binwidth)
bin_x = np.arange(0.6, 7 + 0.3, 0.3)
bin_y = np.arange(12, 58 + 3, 3)
plt.hist2d(data=fuel_econ, x='displ', y='comb', cmin=0.5, cmap='viridis_r', bins=[bin_x, bin_y]);
plt.xlabel('Dispalcement (1)');
plt.ylabel('Combine fuel efficiency (mpg)');
plt.colorbar();
答案 6 :(得分:-1)
对于具有整数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
调用会为每个整数添加一个勾号。
答案 7 :(得分:-1)