【问题标题】:how to stop movement of force directed graph on force.start如何在 force.start 上停止力有向图的移动
【发布时间】:2013-12-05 07:10:39
【问题描述】:

我正在使用力导向图在图形视图上显示拓扑数据。我写了下面的代码:

var force = d3.layout.force()
        .charge(-120)
        .alpha(0)
        .linkDistance(65)
        .gravity(0.03)
        .size([width, height]);

force
      .nodes(data.nodes)
      .links(data.links)
      .start();

当我执行代码图初始化时,我需要停止一些动作。我希望在没有任何移动的情况下在静态位置上显示图形,并且所有链接大小在图形初始化时应该相同。如果我会拖动,那么它应该会移动。 任何帮助将不胜感激......!

【问题讨论】:

  • 听起来力布局不是您要寻找的应用程序。您是否考虑过其他任何布局?
  • 实际上我们正在开发网络应用,所以力有向图比其他的更适合。仍然欢迎您的建议。我正在寻找这样的行为 jsfiddle.net/bTyh5/2 而我的 Jsfiddle 是这样的:jsfiddle.net/mayurchavda87/5crQv/3
  • 如果你不想移动,你可以在所有节点上设置.fixed属性。
  • 如果节点设置为 .fixed,则必须手动定位节点,而不是运行强制布局。我想问题是关于使用力布局但没有动画的定位。
  • 强制布局的工作方式是动态计算节点位置。如果您真的想要固定位置,则必须在所有节点上设置固定属性(如 Lars 建议)。您可以先运行布局(不显示)以计算所有节点位置并存储它们。然后在动画期间,将节点添加到各自的位置。

标签: d3.js force-layout


【解决方案1】:

这是static force-directed layout 初始化的示例。

“我们不是每次更新都更新图表,而是运行图表固定次数,然后显示一次。”

force.start();
for (var i = n * n; i > 0; --i) force.tick();
force.stop();

这并不妨碍您以通常的方式设置可拖动节点:

.call(force.drag);

您可以通过控制linkStrength 来帮助链接稳定到您想要的大小

【讨论】:

  • 什么是“n”?我的 JSFIDDLE 链接:jsfiddle.net/mayurchavda87/5crQv/3 实际上我正在使用 setInterval 函数在我的图表中寻找这种(jsfiddle.net/bTyh5/2)类型的行为。当每次更新数据图的新 ajax 请求都在移动时,我需要停止。
  • 如果您查看我链接到的示例,您可以看到 n 是力布局的任意迭代次数,大到足以使布局有机会收敛。因此,每次动态添加新节点时,都可以在这种循环中运行布局,绕过布局动画。
  • "n" 是节点数,这里查看完整代码。 bl.ocks.org/mbostock/1667139
猜你喜欢
  • 1970-01-01
  • 2014-06-13
  • 2019-11-30
  • 1970-01-01
  • 1970-01-01
  • 2019-12-01
  • 2015-06-01
  • 1970-01-01
  • 2019-05-19
相关资源
最近更新 更多