2012-12-26 83 views
2

因此,目前我正在嘗試創建一個圖表中幾千個節點和約30k鏈接的強制有向圖。您可能會猜到,模擬速度非常慢。我想要做的是預先計算節點的所有位置,然後渲染靜態(但是交互式)的圖形。有沒有辦法使用d3.js來計算一個沒有渲染它的力向圖(使其更快),然後從預先計算的值中渲染靜態圖?我的代碼目前是基於邁克·博斯托克的example.靜態D3力導向圖性能

+0

當談到瀏覽器中的交互和動畫時,SVG通常是最慢的解決方案。畫布(或者如果你想用3D的WebGL畫布)進行動畫可能會提高性能,你必須將自己的(或使用一個庫)滾動到對象的拾取和拖拽上 –

+0

^這正是我不想做的事情。我真的不需要完全模擬我的圖,我只需要可視化節點和鏈接,以及它們形成的聚類,所以我選擇了一個有向圖,而且我不需要拖動節點無論如何,我只需要能夠將鼠標懸停在每個節點上並查看關於它們的一些信息,所以我支付了所有不需要的東西的高性價比,我確信有一種方法可以將其刪除,但不知道如何。 – leonsas

回答

1

方法d3使用的是有力的圖形佈局是標準排斥力和吸引力模型,你可以在維基百科上找到僞代碼(http://en.wikipedia.org/wiki/Force-based_algorithms_%28graph_drawing%29#僞代碼)或檢查d3源本身(https://github.com/mbostock/d3/blob/master/src/layout/force.js)。該算法每個tick(或時間片)具有O(n^2)的複雜度,並且需要大約n個ticks才能達到平衡,因此O(n^3)用於整個佈局過程(http:// www .ecs.umass.edu/ECE /實驗室/ vlsicad/ece665 /簡報/力指向-Adel.ppt)。對於數千個節點來說,這是不實際的。


要嘗試回答您的具體問題,只需在您的SVG容器元素上使用CSS display:none即可。一旦初始模擬「最終」完成,您可以獲取SVG元素的HTML源代碼,並將其用作靜態但交互式表示的基礎。 (一旦你有所有元素的html,你只需要將鼠標懸停事件添加到他們,讓他們顯示他們的細節。