Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 来自CSV的D3 Sankey图表渲染错误_Javascript_Csv_D3.js_Svg - Fatal编程技术网

Javascript 来自CSV的D3 Sankey图表渲染错误

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()

我正在尝试使用d3js制作一个Sankey图。我正在使用csv数据源,并使用基于此块的代码:

我的数据集相当大,但我认为我应该在破坏SVG渲染器的阈值以下。不过我不确定。当使用1082行“SankeyDataSampleFunctional.csv”运行时,我的代码可以正常工作。下面是它的外观:

我对原始代码库做了一些细微的修改,以允许我的图在某些层上有大量的节点,而其他层则没有。这是我在sankey.js中对其进行调整的尝试:

 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的极限?还是我只是做错了?如有任何帮助,我们将不胜感激。

您是否尝试过扩大画布尺寸?通常,在我的例子中,如果没有空间留给节点,它就会这样渲染

您可能想看看我在这里发布的答案:
其思想是,您可以使用新的宽度和高度重新生成图形,直到每个节点都有一个合适的高度。

是的,它最终是画布大小,我必须比预期的大很多才能容纳节点。谢谢你的回答!!