【问题标题】:How to make in d3 force layout the gravity data dependant如何在 d3 力布局中使重力数据依赖
【发布时间】:2013-05-25 10:15:08
【问题描述】:

我想用两种类型的节点进行力布局:类型 1 位于中心,类型 2 移动在外围。类型 1 和类型 2 之间存在联系,因此图表应该保持在一起。

我想我可以通过固定类型 1 节点的重力正值和类型 2 负值来做到这一点:

  force.gravity(function(d){return (d.type=='pers')?10:-15})

但重力似乎是所有参数的一个参数。有没有其他方法或者我可以改变它以使重力参数节点依赖?或者完全不同的方式来实现这一点?

【问题讨论】:

    标签: d3.js gravity force-layout


    【解决方案1】:

    我前一阵子试过了,结果也没有任何效果。如果您查看代码,似乎重力无法发挥作用:

    比较 .charge() 和 linkStrength():

    force.linkStrength = function(x) {
      if (!arguments.length) return linkStrength;
      linkStrength = typeof x === "function" ? x : +x;
      return force;
    };
    force.charge = function(x) {
      if (!arguments.length) return charge;
      charge = typeof x === "function" ? x : +x;
      return force;
    };
    

    到.gravity():

    force.gravity = function(x) {
      if (!arguments.length) return gravity;
      gravity = +x;
      return force;
    };
    

    我不确定其他地方是否有进一步的限制,但如果你将重力传递给一个函数,它将不知道如何处理它。

    【讨论】:

    • 我认为这里通常的程序是简单地使用.gravity(0),然后实现自定义强制,例如本例中的gravity() 函数:bl.ocks.org/mbostock/1804919
    【解决方案2】:

    电荷是力的属性,而不是节点的属性。您可以对每个节点收取不同的费用。节点带有负电荷,因此它们被“重力”吸引并被其他节点排斥。如果您为类型 1 的节点设置较大(幅度)的电荷,而为类型 2 的节点设置较小的电荷,您可能会达到预期的效果。

    Mike Bostock 的这次演讲解释并演示了不同的力配置:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-28
      • 2016-12-02
      • 1970-01-01
      • 2017-01-03
      • 2013-07-08
      • 1970-01-01
      • 2013-04-13
      相关资源
      最近更新 更多