仅在d3.js中对进入的节点应用强制
我在D3中使用了一个强制导向布局,并可以选择暂停。但是,我希望布局进入节点,即使图的其余部分应该保持静态。我尝试将强制算法应用于输入节点,如下所示:仅在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 .
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力布局应该作用于什么。这与绘制的节点/链接不同——这是单独处理的。