【问题标题】:d3.js: Does force layout only work with circles?d3.js:强制布局是否仅适用于圆圈?
【发布时间】:2012-10-28 03:58:48
【问题描述】:

我正在使用 d3.force 来设置节点并通过链接连接每个节点。当我使用圆圈作为节点时,一切都很好:

  var nodes = [{ title: "ABC", group: 1 }, { title: "DEF", group: 1 }, { title: "Blah", group: 1 }];
  var links = [{ source: 0, target: 1 }, { source: 0, target: 2 }];

  var force = d3.layout.force()
    .charge(-120)
    .linkDistance(function(d) {
      console.log(d);
      return 250 * Math.random() + 100;
    })
    .size([r, r]);

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

  var link = svg.selectAll("line.link")
    .data(links)
    .enter()
    .append("line")
    .attr("class", "link")
    .style("stroke-width", 1);

  var node = svg.selectAll("circle.node")
    .data(nodes)
    .enter()
    .append("circle")
    .attr("class", "node")
    .attr("r", 15)
    .call(force.drag);

但是,如果我将节点更改为使用“g”,它将停止工作:

  var node = svg.selectAll("g.node")
    .data(nodes)
    .enter()
    .append("g")
    .attr("class", "node")
    .attr("r", 15)
    .call(force.drag);

  var circle = node.append("circle")
    .attr("fill", function(d) {
      var b = Math.floor(255 * Math.random()),
          rgba = "rgba(0, 0, " + b + ", 0.7)";

      return rgba;
    })
    .attr("r", 15);

我可以看到圆圈被添加到 g 元素中,但它们不在应有的位置,并且它们没有通过链接连接。

我真的很想使用“g”元素作为节点,这样我就可以向它添加文本。有没有人对此有任何见解?

或者,如果有办法将文本添加到“圆圈”元素。我也对此持开放态度。

谢谢!

【问题讨论】:

    标签: javascript d3.js force-layout


    【解决方案1】:

    尝试将其合并到一个语句中,最后调用:

    var node = svg.selectAll("g.node")
        .data(nodes)
        .enter()
        .append("g")
        .attr("class", "node")
        .append("circle")
        .attr("fill", function(d) {
           var b = Math.floor(255 * Math.random()),
           rgba = "rgba(0, 0, " + b + ", 0.7)";
           return rgba;
         })
        .attr("r", 15)
        .call(force.drag);
    

    然后你可以附加其他元素,例如文本。

    【讨论】:

    • 啊,我仍然无法添加文本。因此,在圆圈周围添加“g”包装时效果很好,但是,当我尝试将文本附加到“g”时,它会破坏力有向图。这甚至可以将文本添加到力有向图吗?
    猜你喜欢
    • 2013-07-19
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    • 2013-11-15
    • 2012-02-23
    • 2018-11-15
    • 2013-07-15
    相关资源
    最近更新 更多