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函数中使用条件一样简单