0

我在 D3 中使用强制定向布局,并可选择暂停它。但是,即使图形的其余部分应该保持静态,我也想布局输入节点。我尝试将力算法应用于输入节点,如下所示:

nnodes = vis.selectAll(".node")
  .data(updatedData.nodes)
nlinks = vis.selectAll(".link")
  .data(updatedData.links)

// apply graphics to entering nodes and links

force
  .nodes(nnodes.enter())
  .links(nlinks.enter())
  .start()
force.on("tick", tick)

wheretick在应用于完整图形或用户拖动节点时正确设置节点和链接位置。

但是,使用上面的代码,新节点不会超出其初始位置。

我可以以某种方式仅将力算法应用于输入节点吗?

4

1 回答 1

2

力布局通过考虑所有节点和链接来计算节点位置。您不能真正将其应用于图表的一部分。所以你需要做的是修改现有力布局的节点和链接,而不是只给它新的。要使已经存在的节点保持在原处,请尝试在它们上设置fixed属性。

您的代码将如下所示:

nodes.forEach(function(n) { n.fixed = true; });

// update graphics

newNodes.forEach(function(n) { nodes.push(n); });
// add new links similarly

force.start();
于 2013-06-16T11:48:09.860 回答