D3.js力导向图链接未找到。

6
我目前正在尝试使用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"
  }
]

我的力模拟设置是什么。
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()

它在执行d3.forceLink(links)时抛出错误:Uncaught Error: missing: 4d2b0275-5bc7-e611-81c4-00155df7ea33。但实际上这个链接是存在的,为什么会出现这个错误呢?
1个回答

14

在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:

.force("link", d3.forceLink(links)
     .id(function(d,i) {
         return d.id
     })
    .distance(20)
    .strength(1)
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接