Я новичок в D3.js, работаю над визуализацией сети, и я не могу понять, как правильно указать мои ссылки для принудительного макета. Проблема в том, что по умолчанию d3 интерпретирует «источник» и «цель» ссылок как индексы узлов в массиве «узлов». Однако в моих данных источник и цель относятся к идентификационным номерам узлов, которые я сохранил в атрибуте узла. Как сделать так, чтобы ссылки указывали на 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()
.