2017-04-23 206 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

您是否嘗試過放大畫布尺寸?通常,就我而言,如果節點沒有剩餘空間,它就會像這樣呈現。