rik*_*ikb 5 javascript d3.js force-layout
我有一个d3力布局图viz工作得非常好,但它经常被"卡住"过早.例如,节点正朝着良好的位置摇摆,如果"碰撞"它们(向它们的位置注入一点随机性start()
,它们最终会到达那里.如果我减少friction
,问题也会变得更糟,因为用户认为它过于狂热.
我在force.js
源代码中看到提到'annealling'(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);
Run Code Online (Sandbox Code Playgroud)