仅在d3.js中对进入的节点应用强制

仅在d3.js中对进入的节点应用强制,d3.js,force-layout,D3.js,Force Layout,我在D3中使用了一个强制导向布局,并可以选择暂停。但是,我希望布局进入节点,即使图的其余部分应该保持静态。我尝试将强制算法应用于输入节点,如下所示: nnodes = vis.selectAll(".node") .data(updatedData.nodes) nlinks = vis.selectAll(".link") .data(updatedData.links) // apply graphics to entering nodes and links force .

我在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)
其中,
勾选
设置应用于完整图形或用户拖动节点时正确的节点和链接位置

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


我是否可以将强制算法仅应用于输入节点?

强制布局通过考虑所有节点和链接来计算节点位置。你不能把它仅仅应用于一个图形的一部分。因此,您需要做的是修改现有force布局的节点和链接,而不是只提供新的节点和链接。要使已经存在的节点保持在原来的位置,请尝试对其设置
fixed
属性

您的代码如下所示:

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

// update graphics

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

force.start();

这使我的计划比我想象的更加困难。我是否正确理解力的
节点
链接
方法基本上只是告诉d3节点/链接存储在什么变量中,而不一定是什么节点应该受到力的影响?在某种程度上,我想这是有道理的,因为其他节点可能会像往常一样使用它们的力,只是不移动它们自己,即
固定
。不,
节点
链接
告诉D3力布局应该作用于什么。这与绘制的节点/链接不同——这是单独处理的。