如何在d3.js的包布局中插入饼图?

3

大家好,我希望在我的组合布局中添加饼图,而不是简单的圆形。

假设这是我的饼图数据和饼图布局:

var data=[2,3,4,5]

变量 arc = d3.svg.arc() .outerRadius(50) .innerRadius(0);

变量 pie = d3.layout.pie() .sort(null)

.value(function(d) { return d; });

这就是packlayout如何绘制圆形。
  var circle = svg.selectAll("circle")
  .data(nodes1)
  .enter().append("circle")
  .attr("class", function(d) { return d.parent ? d.children ? "node" : "node node--leaf" : "node node--root"; })
  .style("fill", function(d) { return d.children ? color(d.depth) : null; })
  .on("click", function(d) { if (focus !== d) zoom(d), d3.event.stopPropagation(); }); 

请问有人可以解释一下,如何在包装布局中添加路径而不是圆形,并将其制作成饼图?![enter image description here][1]

1个回答

6

如果不直接使用pack布局结果,您可以使用从pack布局输出的r值来定义arc生成器的outerRadius。然后,您可以在图表中附加svg g元素,而不是附加svg circle元素,并在其中附加每个弧:

完整示例:http://bl.ocks.org/jsl6906/4a1b818b64847fb05d56 带饼状图的Pack布局

相关代码:

var bubble = d3.layout.pack()
      .value(function(d) { return d3.sum(d[1]); })
      .sort(null)
      .size([diameter, diameter])
      .padding(1.5),
    arc = d3.svg.arc().innerRadius(0),
    pie = d3.layout.pie();

var svg = d3.select("body").append("svg")
    .attr("width", diameter)
    .attr("height", diameter)
    .attr("class", "bubble");

var nodes = svg.selectAll("g.node")
    .data(bubble.nodes({children: data}).filter(function(d) { return !d.children; }));
nodes.enter().append("g")
    .attr("class", "node")
    .attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });

var arcGs = nodes.selectAll("g.arc")
    .data(function(d) {
      return pie(d[1]).map(function(m) { m.r = d.r; return m; });
    });
var arcEnter = arcGs.enter().append("g").attr("class", "arc");

arcEnter.append("path")
    .attr("d", function(d) {
      arc.outerRadius(d.r);
      return arc(d);
    })
    .style("fill", function(d, i) { return color(i); });

谢谢Josh!它起作用了,尽管我试图通过将饼图移动到相应的包布局气泡的位置来实现。 - Aditeya Pandey
1
已更新至v4版本,链接如下:https://bl.ocks.org/jsl6906/6560687444d2e1421e4d24360c27728a/5d42f667eff12db4e95708ffe8169fa69d5a08f9 - Josh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接