2017-04-23 194 views
1

我正在尝试使用d3js制作Sankey图表。我正在使用csv数据源并使用基于此块的代码:http://bl.ocks.org/d3noob/c9b90689c1438f57d649从CSV渲染不正确的D3 Sankey图表

我的数据集相当大,但我认为我应该低于要打破SVG渲染器的阈值。我不确定。我的代码在使用1082行“SankeyDataSampleFunctional.csv”运行时是可用的。这里是什么样子: working code

我已经取得了一些细微的修改原来的代码库,以便为我的图有显着较大量的节点在某个层上,而有的则没有。这是我在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”等进入有问题的同一代码:

first bug

我检查了控制台和它说我想画负一堆东西高度。我的第一个办法是剪掉这2102个额外节点中的2101个,看看我是否可以在下一层上正确渲染一个节点。当然不是:

enter image description here

我尝试添加一些额外的深度分支,并继续呈现错误的方向分支:

enter image description here

最后,我检查这个职位约在d3 sankey中使用大型数据集的其他人:Large data set breaks d3 sankey diagram

我尝试在此帖子中强制我的身高不为零的“快速修复” :

.attr("height", function(d) { return d.dy < 0 ? 0 : d.y; }) 

但是,这并没有为我做很多。我也试图通过-1,是希望乘d.dy的负值反转他们,这就是我的一切:

enter image description here

这里是我的代码:http://plnkr.co/edit/g2rE0z?p=info

请问这是不是在SVG与最后2k个节点的限制?或者我只是想解决这个问题?任何援助将不胜感激。

回答

0

您是否尝试过放大画布尺寸?通常,就我而言,如果节点没有剩余空间,它就会像这样呈现。