我在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
在应用于完整图表或用户拖动节点时正确设置节点和链接位置。
但是,使用上面的代码,新节点不会超出其初始位置。
我能以某种方式将强制算法应用于仅进入节点吗?
答案 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();