2012-09-11 70 views
0

我在屏幕上的圖表和所有需要的是在一個名爲jsonData變量,這是我的方式,以避免在服務器上單獨存儲的JSON文件中的數據。 現在jsonData包含超過我真的想在一開始就顯示出,所以我必須選擇所需要的節點。 這個想法是有一個根節點,並顯示所有與它直接相連的節點以及它們之間的連接。 有沒有簡單的可能性來做到這一點? 也許我可以改線需要圖形D3接節點

var node = svg.selectAll(".node") 
    .data(jsonData.nodes) 
.enter().append("g") 
    .attr("class", "node") 
    .call(force.drag); 

,因爲它並不需要選擇所有的人,但我怎麼能挑那些需要的? 我在背景中有一個數組,包含所有需要的鏈接,我要寫一個將存儲連接節點的部分。 我不能直接給這個新陣的svg.selectAll -part,否則鏈接將崩潰(他們指的是節點的數量由它的更大的陣列中的原始位置)。 關於這個的任何提示?我無法通過谷歌搜索找到任何此類示例,但如果您可以在網絡中查找某些內容,請隨時通過鏈接回答!

由於提前, 大衛

+0

所以基本上是這樣的。不使用jsonData.nodes作爲數據,而是使用變量並且收集那些變量中的節點。基本上你可以有一個回調函數來設置該變量中的數據,並且只需要執行svg.selectAll(「。node」)。data(myVar)。現在,你如何準確地挑選這些節點是業務:某些值的那些是我的猜測...... – paxRoman

+0

你是對的,這似乎是要走的路。但是,我怎樣才能修復後的鏈接? 「{」source「:16,」target「:7,」value「:4}'還有一些鏈接,其中'source'和'target'指向舊數組中的位置。 – David

+0

當然你也是這樣做的......對於鏈接,你將使用另一個鏈接列表(鏈接數組),將其分配給與你的力指向佈局有關的鏈接列表......(因爲我認爲我們會講導向力)......但是在這裏,你將不得不決定如何添加這些鏈接,因爲在我的經驗,一個鏈接,該鏈接已經在屏幕上並不需要重新繪製的...你將有很多有趣的嘗試得到這個權利,但最終我猜你會成功......鏈接只是具有2個屬性的對象:源和目標...你必須小心有向和無向圖 – paxRoman

回答

0
function getNodesIndex(searchedFor){ 
    for(var i = 0; i < jsonData.nodes.length; i++){ 
     if(jsonData.nodes[i].name == searchedFor){ 
      return i; 
     } 
    }//for 
} 

function getNetParts(searchedFor){ 
    reqNodes = null; 
    reqNodes = []; 
    reqLinks = null; 
    reqLinks = []; 

    var index = getNodesIndex(searchedFor); 
    reqNodes.push(jsonData.nodes[index]); 

    for(var y = 0; y < jsonData.nodes[index].connections.length; y++){ 
     //stores every node connected with the main node in reqNode 
     reqNodes.push(jsonData.nodes[jsonData.nodes[index].connections[y]]);  
    } 

    for(var z = 1; z < reqNodes.length; z++){     
     //circle through stored Nodes 
     for(var c = 0; c < reqNodes[z].connections.length; c++){  
      //inspect all of their connections 
      for(var w = 0; w < reqNodes.length; w++){ 
       //check all stored reqNodes for the one linked 
       if(jsonData.nodes[reqNodes[z].connections[c]].name == reqNodes[w].name)   { 
        //the node is available at reqNodes? 
        var source = null; 
        var newLink = { 
         "source":z, 
         "target":w, 
         "value":1, 
        };       
        reqLinks.push(newLink);     
       } 
      } 
     } 
    } 
} 

然後update()只是刪除任何屏幕上,獲取新的數據並重建可視化。 萬一有人有同樣的煩惱......;)