我有一个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/

10-12 13:49