私はネットワークの視覚化に取り組んでいる 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()
。