Javascript 来自CSV的D3 Sankey图表渲染错误
我正在尝试使用d3js制作一个Sankey图。我正在使用csv数据源,并使用基于此块的代码: 我的数据集相当大,但我认为我应该在破坏SVG渲染器的阈值以下。不过我不确定。当使用1082行“SankeyDataSampleFunctional.csv”运行时,我的代码可以正常工作。下面是它的外观: 我对原始代码库做了一些细微的修改,以允许我的图在某些层上有大量的节点,而其他层则没有。这是我在sankey.js中对其进行调整的尝试:Javascript 来自CSV的D3 Sankey图表渲染错误,javascript,csv,d3.js,svg,Javascript,Csv,D3.js,Svg,我正在尝试使用d3js制作一个Sankey图。我正在使用csv数据源,并使用基于此块的代码: 我的数据集相当大,但我认为我应该在破坏SVG渲染器的阈值以下。不过我不确定。当使用1082行“SankeyDataSampleFunctional.csv”运行时,我的代码可以正常工作。下面是它的外观: 我对原始代码库做了一些细微的修改,以允许我的图在某些层上有大量的节点,而其他层则没有。这是我在sankey.js中对其进行调整的尝试: function initializeNodeDepth()
function initializeNodeDepth() {
var ky = d3.min(nodesByBreadth, function(nodes) {
if (nodes.length > 200){
return (size[1] - (nodes.length - 1) * 1) / d3.sum(nodes, value);
}
else if (nodes.length > 1000) {
console.log((size[1] - (nodes.length - 1) * 1) / d3.sum(nodes, value))
return (size[1] - (nodes.length - 1) * 1) / d3.sum(nodes, value);
}
return (size[1] - (nodes.length - 1) * nodePadding) / d3.sum(nodes,
value);
});
我这样做是为了在有大量数据的层上限制节点之间的空间。
但是当我尝试添加最后一层2102个节点时,我遇到了各种各样的问题。这就是我将“SankeyDataSample1.csv”插入到相同代码中时的样子:
我检查了控制台,上面说我正在画一堆负高度的东西。我的第一个办法是剪掉2102个额外节点中的2101个,看看我是否能在下一层上只得到一个节点来正确渲染。当然不是:
我尝试为该分支添加一些额外的深度,但它继续使该分支指向错误的方向:
最后,我查看了这篇关于其他人在d3 sankey中使用大型数据集的帖子:
我试图“快速修复”强迫我的身高不为零,见以下帖子:
.attr("height", function(d) { return d.dy < 0 ? 0 : d.y; })
.attr(“高度”,函数(d){返回d.dy<0?0:d.y;})
然而,这对我没有多大帮助。我还尝试将d.dy的负值乘以-1,希望将它们反转,我得到的结果如下:
这是我的密码:
最后2k个节点是否已达到SVG的极限?还是我只是做错了?如有任何帮助,我们将不胜感激。您是否尝试过扩大画布尺寸?通常,在我的例子中,如果没有空间留给节点,它就会这样渲染 您可能想看看我在这里发布的答案:
其思想是,您可以使用新的宽度和高度重新生成图形,直到每个节点都有一个合适的高度。是的,它最终是画布大小,我必须比预期的大很多才能容纳节点。谢谢你的回答!!