2016-04-01 84 views
1

我目前使用D3庫進行網絡可視化,更確切地說,是力佈局。D3.js強制佈局網絡的閾值函數的鏈接行程寬度

我使用的是由西蒙·雷珀這裏提供的功能:

http://jsfiddle.net/simonraper/TdHgx/?utm_source=website&utm_medium=embed&utm_campaign=TdHgx

到我的網絡上應用動態閾值。

但是我注意到一個問題,當閾值改變時,網絡的筆畫寬度不正確地顯示。即使在Raper先生的例子中,您也可以看到鏈接的筆畫寬度無緣無故地變化。

快速查看控制檯向我顯示的值是正確的,並且網絡的形狀也是正確的,只顯示鏈接的中間寬度是錯誤的。它似乎是一個索引問題,因爲不正確的值不是隨機的,而是與其他鏈接相對應。

我能找到的最好的是取代:

link=link.data(graph.links); 

通過

link = link.data(force.links(), function(d){return d.source.name + "-" + d.target.name; }); 

在重啓功能。

鏈接的行程寬度現在是正確的,但這樣做的鏈接時,有時會不可見......

如果任何人都更有經驗與D3庫可以幫助我將不勝感激;)

回答

1

它應該是:

link.data(force.links(), function(d){return d.source + "-" + d.target; }); 

沒有d.source.named.target.name

工作合作德here

編輯

在滑動閾值。 有一個節點發生的過濾,這是鏈接沒有顯示的原因。

function threshold(thresh) { 
    //clearing up links 
    graph.links.splice(0, graph.links.length); 
    //only selecting and pushing links with value > threshold. 
     for (var i = 0; i < graphRec.links.length; i++) { 
      if (graphRec.links[i].value > thresh) {graph.links.push(graphRec.links[i]);} 
     } 
    restart(); 
} 
+0

感謝您的迴應,但您的代碼無法正常工作。在將閾值移至2以上後,90%的鏈接消失。此外,還有:link = link.data(graph.links,function(d){return d.source +「 - 」+ d.target;});而不是link.data(force.links(),function(d){return d.source +「 - 」+ d.target;}); – 6uillaum3

+0

請查看我上面的編輯部分...這將解釋爲什麼鏈接會滑動。 – Cyril

+0

我已經知道它是如何工作的:),但如果仔細觀察網絡,您會注意到有些節點已連接,但鏈接不可見。通過查看節點如何移動,您可以快速地看到它們應該連接,但鏈接不顯示。例如,當閾值爲4-5時,您可以看到一些節點在中間組合在一起,但它們的鏈接不可見,並且我已經檢查了它們的值,應該將它們連接起來。編輯:嘗試將它們移到你身邊會看到我的意思,它們是連接的。 – 6uillaum3

相關問題