Add text label to d3 node in Force directed Graph and resize on hover

后端 未结 1 1250
-上瘾入骨i
-上瘾入骨i 2020-12-02 18:38

I am trying to add text label to nodes in d3 Force Directed Graph, there seems to be an issue. This is my Fiddle:

相关标签:
1条回答
  • 2020-12-02 19:16

    You are adding a text element inside a circle, that won't work. You can add groups under the svg element and then append the circle and a text in each group:

    // Create the groups under svg
    var gnodes = svg.selectAll('g.gnode')
      .data(graph.nodes)
      .enter()
      .append('g')
      .classed('gnode', true);
    
    // Add one circle in each group
    var node = gnodes.append("circle")
      .attr("class", "node")
      .attr("r", 5)
      .style("fill", function(d) { return color(d.group); })
      .call(force.drag);
    
    // Append the labels to each group
    var labels = gnodes.append("text")
      .text(function(d) { return d.name; });
    
    force.on("tick", function() {
      // Update the links
      link.attr("x1", function(d) { return d.source.x; })
        .attr("y1", function(d) { return d.source.y; })
        .attr("x2", function(d) { return d.target.x; })
        .attr("y2", function(d) { return d.target.y; });
    
      // Translate the groups
      gnodes.attr("transform", function(d) { 
        return 'translate(' + [d.x, d.y] + ')'; 
      });    
    
    });
    

    A fork of your fiddle with this strategy is here

    0 讨论(0)
提交回复
热议问题