我正在使用这个很棒的例子来创建维恩图:
http://bl.ocks.org/christophe-g/b6c3135cc492e9352797

我目前正在尝试在所有节点(小圆圈)上放置文本标签,但是由于我是D3.js库的新手,因此我正竭力做到这一点。
我设法为所有节点分配了一个文本标签(可以通过使用Firebug等检查HTML代码看到此标签),但是文本标签没有显示。如何在节点上放置可见的文本标签?

在下面的代码中可以找到一些有趣的代码:文本标签未显示在节点上:

 /* Create the text for each individual circle */
    pointsEnter.append("text")
    .attr("class", "label")
    .attr("text-anchor", "middle")
    .attr("dy", ".40em")

    pointsEnter.selectAll("text.label").data(function(d) {
        return [d];
    })
    .text(function(d) {
        return d.name;
    })
    .attr("x", function(d) {
        return d.x
    })
    .attr("y", function(d) {
        return d.y
    });


https://jsfiddle.net/ej5uz83n/1/

任何帮助是极大的赞赏。

最佳答案

现在,您正在尝试将文本元素附加到圆上,但是您无法在SVG中执行此操作。最简单的解决方法是为每个g / circle对附加一个text元素,然后将它们与transform放置在一起:

var points = circleContainer.selectAll("circle.node")
  .data(function(d) {
    return d.nodes
  }, function(d) {
    return d.name
  });

// group for circle and text
var g = points.enter().append("g");

g.append('circle')
  .attr('r', 0)
  .attr('class', 'node')
  .call(layout.packer().drag);

/* Create the text for each individual circle */
g.append("text")
  .attr("class", "label")
  .attr("text-anchor", "middle")
  .attr("dy", ".40em")
  .text(function(d){
    return d.name;
    })
  .style("fill", "black");

g.selectAll("circle").transition()
  .duration(isFirstLayout ? 0 : test.duration())
  .attr('r', function(d) {
    return d.r
  });

points.exit().transition()
  .attr('r', 0)
  .remove();


然后,“ ticker”功能变为:

ticker: function() {
  g.attr("transform", function(d) {
    return "translate(" + d.x + "," + d.y + ")";
  })
}


更新了fiddle

10-05 21:06
查看更多