Javascript 径向力布局的节点仅占圆的四分之一

Javascript 径向力布局的节点仅占圆的四分之一,javascript,d3.js,Javascript,D3.js,我在单击按钮时实现了布局更改,使其从默认的强制布局变为径向布局: 它似乎可以正常工作,除了节点只占圆的四分之一 以下是更新代码: function radial() { simulation .force("charge", d3.forceCollide().radius(10)) .force("r", d3.forceRadial(function(d) { if (d.id < 5) { console.log('less than

我在单击按钮时实现了布局更改,使其从默认的强制布局变为径向布局:

它似乎可以正常工作,除了节点只占圆的四分之一

以下是更新代码:

function radial() {
  simulation
    .force("charge", d3.forceCollide().radius(10))
    .force("r", d3.forceRadial(function(d) { 
      if (d.id < 5) {
        console.log('less than : ', d.id)
        return 100;
      } else {
        console.log('more than : ', d.id)
        return 300;
      } 
    }))
    .force("center", null)
    .on("tick", newTicked);
  simulation.alphaTarget(0.3).restart()

  function newTicked() {
    node
      .attr("transform", function(d) {
        return "translate(" + d.x + ", " + d.y + ")";
      });
  }
}
函数径向(){
模拟
.力(“电荷”,d3.力碰撞().半径(10))
.力(“r”,d3.径向力(函数(d){
如果(d.id<5){
console.log('小于:',d.id)
返回100;
}否则{
console.log('超过:',d.id)
返回300;
} 
}))
.force(“中心”,空)
.on(“勾号”,新勾号);
simulation.alphaTarget(0.3).restart()
函数newTicked(){
节点
.attr(“转换”,函数(d){
返回“translate”(“+d.x+”,“+d.y+”);
});
}
}
结果是这样的:

首先,将
null
传递给原力实际上会删除它。政府很清楚:

要移除具有给定名称的力,请将
null
作为力传递

如果我正确理解了您的问题,您只需将
x
y
中心传递给径向力即可解决问题,径向力接受它们。像这样:

.force("r", d3.forceRadial(function(d) {
    if (d.id < 5) {
        return 100;
    } else {
        return 300;
    }
}, width / 2, height / 2))
.link{
冲程:#aaa;
}
.节点{
指针事件:全部;
中风:无;
笔划宽度:40px;
}

径向的

发布几秒钟后,我就发现了问题,但还无法解决。这是因为我的“中心”力量。我认为将其设置为null将删除它。如何消除径向函数中的中心力?谢谢你,杰勒多。再次感谢在我问另一个问题之前,你知道一种方法可以让一些节点不在径向力中吗?比如说某一类型的节点,我只想在它们上使用默认的力物理,而不是径向视图的一部分?@那家伙即使我知道我建议你发布一个新问题:在评论部分回答问题相当麻烦。是的,可以,干杯,我想这可能和在forceRadial函数中使用条件一样简单