14

私はネットワークの視覚化に取り組んでいる D3.js の初心者ですが、フォース レイアウトのリンクを適切に指定する方法がわかりません。問題は、デフォルトで d3 がリンクの「ソース」と「ターゲット」を「ノード」配列内のノードのインデックスとして解釈することです。ただし、私のデータでは、ソースとターゲットは、ノード属性に保存したノードの ID 番号を参照しています。node.idの代わりに指すリンクを取得するにはどうすればよいnode.indexですか? ここで私はそれをすべきだと思います:

var nodes = data.nodes;
var edges = data.edges;
var force = d3.layout.force()
            .nodes(d3.values(nodes))
            .links(edges)
            .size([w, h])
            .linkDistance(80)
            .charge(-500)
            .gravity(0.2)
            .on("tick", tick)
            .start();

.nodes()...しかし、パーツを変更する必要があるのか​​、パーツを変更する必要があるのか​​ わかりません.links()。その直前にこれを追加してみました:

var nodes = data.nodes;
for (var i = 0; i < nodes.length; i++) {
    nodes[i].index = nodes[i].id;
    console.log(i + " " + nodes[i].index + " " + nodes[i].id);
}

...しかし、indexフォースを作成すると属性が上書きされてしまいます。

私はこの質問を読みましたが、そこにある唯一の答えはちょっとしたハックのようです. 「データキー」についても言及されていますが、それらについてはあまり見つけることができず、実際に関数を使用していないため、それらをどのように組み込むかわかりませんenter()

4

1 に答える 1