仅对d3.js中的进入节点施加强制

时间:2013-06-16 10:34:57

标签: 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
  .nodes(nnodes.enter())
  .links(nlinks.enter())
  .start()
force.on("tick", tick)

其中tick在应用于完整图表或用户拖动节点时正确设置节点和链接位置。

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

我能以某种方式将强制算法应用于仅进入节点吗?

1 个答案:

答案 0 :(得分:2)

强制布局通过考虑所有节点和链接来计算节点位置。您无法将其真正应用于图表的某些部分。因此,您需要做的是修改现有强制布局的节点和链接,而不是仅提供新的布局和链接。要使已存在的节点保持原样,请尝试在其上设置fixed属性。

您的代码看起来像这样:

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

// update graphics

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

force.start();