D3.js d3包装布局-如果数据有';0';价值观

D3.js d3包装布局-如果数据有';0';价值观,d3.js,D3.js,我使用d3.layout.pack()为以下json创建了一个打包气泡图,其中包含“0”值 { "children": [{ "className": "a", "value": 0}, { "className": "b", "value": 1}, { "className": "c", "value": 0}, { "className": "d", "value": 0}, { "className": "f", "value": 0}, { "className": "g", "val

我使用d3.layout.pack()为以下json创建了一个打包气泡图,其中包含“0”值

{ "children": [{ "className": "a", "value": 0},
{ "className": "b", "value": 1},
{ "className": "c", "value": 0},
{ "className": "d", "value": 0},
{ "className": "f", "value": 0},
{ "className": "g", "value": 8},
{ "className": "h", "value": 2},
{ "className": "i", "value": 6},
{ "className": "j", "value": 8},
{ "className": "k", "value": 4},
{ "className": "l", "value": 3}] };
创建此图表时,有些气泡重叠

如何解决此问题?

这是一个问题。据迈克·博斯托克说:

可能[您]应该在计算包布局时过滤掉零值(即使是非常小的值)。问题是当两个被比较的值非常不同时(一个非常小,比如接近零,另一个非常大),包交叉测试失败

因此,解决方案是过滤掉零:

flat.children = flat.children.filter(d=>d.value>0);

这是你的小提琴:

我可以过滤零值。但是我如何才能在我的数据中找到差异很大的小值呢?有办法吗@Gerardo Furtado编写了一个函数,根据您想要的阈值将它们过滤掉。由于数据不同,我不能使用静态阈值。因此,如果有任何数学函数可以用来找到阈值,这将是很有帮助的。因为这是另一个问题,请发布另一个问题与所有的规格。