【问题标题】:How to insert pie charts in Pack Layout in d3.js?如何在 d3.js 的包布局中插入饼图?
【发布时间】:2015-01-05 23:09:36
【问题描述】:

大家好,我想在我的包布局中添加饼图,而不是简单的圆圈。

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

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

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

var pie = d3.layout.pie() .sort(null)

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

这就是包布局绘制圆圈的方式

  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(); }); 

谁能解释我如何在包布局中而不是附加圆圈,而是附加路径并从中制作饼图?![在此处输入图像描述][1]

【问题讨论】:

    标签: javascript svg d3.js pie-chart circle-pack


    【解决方案1】:

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

    完整示例:http://bl.ocks.org/jsl6906/4a1b818b64847fb05d56

    相关代码:

    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); });
    

    【讨论】:

    猜你喜欢
    • 2015-03-19
    • 2014-03-23
    • 2020-08-18
    • 1970-01-01
    • 2017-10-08
    • 2016-12-10
    • 1970-01-01
    • 2016-12-21
    相关资源
    最近更新 更多