0

画面にグラフがあり、必要なすべてのデータはと呼ばれる変数jsonDataにあります。これは、サーバーに個別に保存されているJSONファイルを回避する方法です。これjsonDataで、最初に実際に表示したい以上のものが含まれているので、必要なノードを選択する必要があります。アイデアは、ルートノードを持ち、それに直接接続されているすべてのノードとそれらの間の接続を表示することです。これを行う簡単な可能性はありますか?多分私はラインを変えることができます

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

すべてを選択する必要はありませんが、必要なものを選択するにはどうすればよいですか?バックグラウンドに必要なすべてのリンクを含む配列があり、接続されたノードを格納するパーツを作成するところです。この新しい配列をsvg.selectAll-partに直接指定することはできません。そうしないと、リンクがクラッシュします(ノードの番号は、大きい方の配列の元の位置で参照されます)。そのためのヒントはありますか?Googleの調査では、この例は見つかりませんでしたが、ネットで何かを見つけられた場合は、リンクを使用してお気軽に回答してください。

よろしくお願いします、デビッド

4

1 に答える 1

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()、画面上のすべてを削除し、新しいデータを取得して、視覚化を再構築します。誰かが同じ問題を抱えている場合に備えて... ;)

于 2012-09-18T06:28:32.643 に答える