如何使用D3创建等频(深度)分箱?
D3实现等频(深度)分箱
D3并非仅支持等宽分箱,完全可以实现等频分箱(每个分箱包含近似数量的观测值,阈值宽度不等),核心思路是利用分位数来指定分箱阈值。
实现示例
针对你提供的数据集,我们可以通过以下代码生成等频分箱:
const arr = [0, 0, 1, 10, 100, 102, 200, 253, 10000]; // 计算分位数作为分箱阈值,这里分成3个等频分箱 const quantiles = d3.quantile(arr, [0, 1/3, 2/3, 1]); // 创建分箱生成器并传入自定义阈值 const binGen = d3.bin().thresholds(quantiles); const bins = binGen(arr);
输出结果
生成的分箱如下:
[ [0, 0, 1], [10, 100, 102], [200, 253, 10000] ]
对应的分箱阈值为:
[0, 10, 200, 10000]
原理说明
d3.quantile()函数会根据数据的分布,计算出对应分位点的数值,确保每个分位点之间的观测数量近似相等。- 将这些分位数传入
d3.bin().thresholds(),就能覆盖默认的等宽阈值逻辑,生成等频分箱。 - 若需要更多分箱,只需调整分位数数组即可,比如分成4个等频分箱,可使用
[0, 0.25, 0.5, 0.75, 1]作为分位数参数。
内容的提问来源于stack exchange,提问作者Pierre Delecto
相关产品推荐
相关产品推荐

