您可以使用 D3 创建等宽的 bin,如下所示:
const arr = [0, 0, 1, 10, 100, 102, 200, 253, 10000]
const bin_gen = d3.bin()
const bins = bin_gen(arr)
将数据放入这些容器中:
[
[
0,
0,
1,
10,
100,
102,
200,
253
],
[],
[],
[],
[],
[
10000
]
]
具有这些阈值:
[
[0, 2000],
[2000, 4000],
[4000, 6000],
[6000, 8000],
[8000, 10000],
[10000, 12000]
]
相反,我想要的是每个箱中的观测值数量大致相等,并且阈值宽度不相等。是否有可能使用 D3 只能创建等宽的 bin 而不能创建等深度/频率的 bin?
如果将数据放入排序列表中,那么您可以简单地获取不重叠的块。
// create dummy data, sorted by stringification
const arr = [...Array(23)].map((_, i) => i);
arr.sort();
// get chunk sizes
const n_chunks = 5;
const default_chunk_size = Math.floor(arr.length / n_chunks);
const n_initial_larger_chunks = arr.length % n_chunks;
let index = 0;
const chunks = [];
for (let i = 0; i < n_chunks; i++) {
let sz = default_chunk_size;
if (i < n_initial_larger_chunks) {
sz += 1;
}
chunks.push(arr.slice(index, index + sz));
index += sz;
}
console.log(chunks);
[[0, 1, 10, 11, 12], [13, 14, 15, 16, 17], [18, 19, 2, 20, 21], [22, 3, 4, 5], [6, 7, 8, 9]]