我有一个d3力布局图,也可以很好地工作,但是它经常过早地“卡住”。例如,节点正在向一个好的位置摆动,如果将它们“碰撞”(再次对它们的位置和start()
注入(inject)一些随机性,它们最终会到达那里。如果我减少friction
,问题也会变得更加严重,因为用户认为这是太疯狂了。
我在 force.js
source code中看到提到了“退火”(ala模拟退火),暴露的alpha
参数是关键要素之一。我想知道是否有人想出了如何直接管理常规退火计划(无需修补force.js
!)?
最佳答案
答案的核心是@meetamit的注释(以加速alpha的衰减)。您也可以在布局低于阈值时停止调用布局,还可以通过向节点/链接移动添加过渡来处理“抖动”。
animationStep = 200;
force.on('tick', function() {
node.transition().ease('linear').duration(animationStep)
.attr('transform', function(d) {
//your node transitions here
});
var alpha = force.alpha();
force.stop();
setTimeout(function() {
if (!alpha > 0.001) {
force.alpha(alpha * 0.9);
}
}, animationStep);
};
force.on('tick', tick);
关于javascript - 修改d 3's force layout "退火”时间表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26638331/