如何使用 D3 创建等频(深度)箱?

问题描述 投票:0回答:1

您可以使用 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?

d3.js binning
1个回答
0
投票

如果将数据放入排序列表中,那么您可以简单地获取不重叠的块。

// 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]]
© www.soinside.com 2019 - 2024. All rights reserved.