Adding elements to a D3 circle pack nodes

邮差的信 提交于 2019-12-03 17:16:10

Yes, zooming feature adds some difficulty.

Here is a little bit dirty example of how this can be achieved: plunkr

The key code is:

// Adding Rects to each child circle
var bar1 = svg.selectAll(".bar1")
    .data(nodes)
  .enter().append("rect")
    .attr("class", "bar1")
    .style("fill", "red")
    .style("display", function(d) { return (d.depth == 4) ? null : "none"; });
var bar2 = svg.selectAll(".bar2")
    .data(nodes)
  .enter().append("rect")
    .attr("class", "bar2")
    .style("fill", "green")
    .style("display", function(d) { return (d.depth == 4) ? null : "none"; });
var bar3 = svg.selectAll(".bar3")
    .data(nodes)
  .enter().append("rect")
    .attr("class", "bar3")
    .style("fill", "blue")
    .style("display", function(d) { return (d.depth == 4) ? null : "none"; });

and

var node = svg.selectAll("circle,text,rect");

and

  bar1.attr("y", function(d) { return -d.r/2 * k - d.r/4; })
  bar1.attr("x", function(d) { return -d.r/20 * k; })
  bar1.attr("width", function(d) { return d.r/10 * k -1; });
  bar1.attr("height", function(d) { return d.r/2 * k; });
  bar2.attr("y", function(d) { return -d.r/2 * k - d.r/4; })
  bar2.attr("x", function(d) { return -d.r/20 * k + d.r/10 * k; })
  bar2.attr("width", function(d) { return d.r/10 * k-1; });
  bar2.attr("height", function(d) { return d.r/2 * k; });
  bar3.attr("y", function(d) { return -d.r/2 * k - d.r/4; })
  bar3.attr("x", function(d) { return -d.r/20 * k - d.r/10 * k; })
  bar3.attr("width", function(d) { return d.r/10 * k-1; });
  bar3.attr("height", function(d) { return d.r/2 * k; });
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!