我目前正在尝试使用d3js v4构建一个力导向图。我有以下节点和链接,实际上很简单
节点
[
{
"id":"4d2b0275-5bc7-e611-81c4-00155df7ea33"
},{
"id":"b32b0275-5bc7-e611-81c4-00155df7ea33"
}
]
链接
[
{
"source":"4d2b0275-5bc7-e611-81c4-00155df7ea33",
"target":"b32b0275-5bc7-e611-81c4-00155df7ea33"
}
]
我的forceSimulation设置是
var simulation = d3.forceSimulation(nodes)
.force("charge", d3.forceManyBody())
.force("link", d3.forceLink(links).distance(20).strength(1))
.force("x", d3.forceX())
.force("y", d3.forceY())
.stop()
它会在Uncaught Error: missing: 4d2b0275-5bc7-e611-81c4-00155df7ea33
的d3.forceLink(链接)上抛出错误。
那么为什么这个错误因为链接实际存在呢?
答案 0 :(得分:7)
在D3中,默认的link.id()访问者函数:
允许将每个链接的源和目标指定为节点数组中从零开始的索引。
这意味着源和目标由节点的索引定义,如API中的示例所示:
var links = [
{"source": 0, "target": 1}, //from the first node to the second
{"source": 1, "target": 2} //from the second node to the third
];
但是,由于您要通过节点的id
而不是其数字索引来定义源和目标,因此您必须在id()
函数中指定此ID:< / p>
.force("link", d3.forceLink(links)
.id(function(d,i) {
return d.id
})
.distance(20)
.strength(1)
)