大家好,我想在我的包布局中添加饼图,而不是简单的圆圈。
假设这是我的饼图数据和饼图布局
var data=[2,3,4,5]
var 弧 = d3.svg.arc()
.outerRadius(50)
.innerRadius(0);
var 饼 = d3.layout.pie()
.sort(空)
.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(); });
谁能解释一下我如何不用在包布局中附加圆圈,而是附加路径并从中制作饼图?![在此处输入图像描述][1]
您可以使用r
包布局的值输出来定义outerRadius
你的arc
发电机。然后,而不是附加 svgcircle
将元素添加到图表中,您可以附加 svgg
元素,并将每个弧附加在其中:
Full example: http://bl.ocks.org/jsl6906/4a1b818b64847fb05d56 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); });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)