Matplotlib中的Bin大小(直方图)

Sam*_*mer 133 python matplotlib histogram

我正在使用matplotlib来制作直方图.

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

任何有任何想法的人都非常感谢.

谢谢

Cod*_*Cat 237

实际上,它很容易:您可以使用bin边界列出bin,而不是bin的数量.它们也可能分布不均:

plt.hist(data, bins=[0, 10, 20, 30, 40, 50, 100])
Run Code Online (Sandbox Code Playgroud)

如果您只是希望它们均匀分布,您只需使用范围:

plt.hist(data, bins=range(min(data), max(data) + binwidth, binwidth))
Run Code Online (Sandbox Code Playgroud)

添加到原始答案

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

import numpy as np
plt.hist(data, bins=np.arange(min(data), max(data) + binwidth, binwidth))
Run Code Online (Sandbox Code Playgroud)

  • 用np.arange(...)替换范围(...)以使其与浮点数一起使用. (18认同)
  • 请注意,最后一行仅适用于整数,而不适用于浮点数. (9认同)
  • 这里的binwidth是多少?你以前设置过这个值吗? (6认同)
  • 我相信这个例子中的 binwidth 可以通过以下方式找到:`(data.max() - data.min()) / number_of_bins_you_want`。“+ binwidth”可以更改为“1”,以使这个示例更容易理解。 (4认同)
  • 选项``lw = 5, color = "white"`` 或类似的在条形之间插入白色间隙 (3认同)
  • 除了上述 CodingCat 出色的解决方案之外,对于浮点数据,如果您希望直方图条形以整数 x-ticks 为中心,而不是在 x-ticks 处具有条形边界,请尝试以下调整:bins = np.arange(dmin - 0.5, dmax + 0.5 + binwidth, binwidth) (2认同)

小智 13

对于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)
Run Code Online (Sandbox Code Playgroud)

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

  • 请注意,除了包含两个边界的 N+1(最后一个)bin 之外,bins 包括它们的下限和不包括它们的上限。 (2认同)

Woj*_*ski 6

我使用分位数来做 bins 统一并适合样本:

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')
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

  • 好想法。您可以将分位数列表替换为“np.arange(0, 1.01, 0.5)”或“np.linspace(0, 1, 21)”。没有边缘,但我知道盒子面积相等,但 X 轴宽度不同? (2认同)

Il-*_*ima 5

我想最简单的方法是计算您拥有的数据的最小值和最大值,然后计算L = max - min. 然后除以L所需的 bin 宽度(我假设这就是 bin 大小的意思)并使用该值的上限作为 bin 的数量。