我对d3.js很新,我得到了一个关于分箱的问题。我正在研究一种使用矩阵布局的可视化,以便可视化集合(行)和元素(列)。由于集合的数量非常多,我想使用某种分箱,即我想将输入域中的值映射到某个输出范围,以减少显示的项目数量在屏幕上。
让我们考虑以下基本代码段:
var input = [
{ degree: 1, count: 2070 },
{ degree: 2, count: 1311 },
{ degree: 3, count: 398 },
{ degree: 4, count: 93 },
{ degree: 5, count: 9 }
];
var desired_bins = 3;
在上面的例子中,我有一个长度为5的数组作为输入。在这种情况下,我的输出所需的长度是3项,由desired_bins = 3。
给出我想要计算的内容如下:
var output = [
{ range: "1", count: 2070 },
{ range: "2", count: 1311 },
{ range: "3-5", count: 500}
];
分箱背后的逻辑应如下: 每个出纸槽不应包含多于n / k的值,其中n是输入中的元素总数(2070 + 1311 + ... + 9 = 3881),k是所需输出箱的数量,在这种情况下为3 。 因此每个bin应包含最多1294个元素。如果输入域中的一个项目已经包含超过1294个元素,那么它必须是一个单独的出纸槽,因为它不能被拆分。
我正在研究d3.scales,它可以用于很多事情,但我不确定它们是否适合我的特定用例。
如何使用d3的内置功能解决这个问题?或者我只是需要从头开始实现分箱算法?