Javascript 向D3.js中的动画饼图添加新线段
我无法在D3.js饼图中添加线段。我知道我需要使用Javascript 向D3.js中的动画饼图添加新线段,javascript,d3.js,visualization,pie-chart,Javascript,D3.js,Visualization,Pie Chart,我无法在D3.js饼图中添加线段。我知道我需要使用.enter()和.append()来暂存新数据——但我不确定在对弧进行分组(我需要用于标签)时如何应用这些数据 以下是我的更新功能: var updateChart = function(dataset) { arcs.data(donut(dataset)); arcs.transition() .duration(duration) .attrTween("d", arcTween); sliceLabel.da
.enter()
和.append()
来暂存新数据——但我不确定在对弧进行分组(我需要用于标签)时如何应用这些数据
以下是我的更新功能:
var updateChart = function(dataset) {
arcs.data(donut(dataset));
arcs.transition()
.duration(duration)
.attrTween("d", arcTween);
sliceLabel.data(donut(dataset));
sliceLabel.transition()
.duration(duration)
.attr("transform", function(d) { return "translate(" + (arc.centroid(d)) + ")"; })
.style("fill-opacity", function(d) {
if (d.value === 0) { return 1e-6; }
else { return 1; }
});
};
如何设置初始图形:
var arc = d3.svg.arc()
.innerRadius(radius * .4)
.outerRadius(radius);
var svg = d3.select("body")
.append("svg")
.append("svg")
.attr("width", width)
.attr("height", height);
var arc_grp = svg.append("g")
.attr("class", "arcGrp")
.attr("transform", "translate(" + (width / 2) + "," + (height / 2) + ")");
var label_group = svg.append("g")
.attr("class", "lblGroup")
.attr("transform", "translate(" + (width / 2) + "," + (height / 2) + ")");
var arcs = arc_grp.selectAll("path")
.data(donut(data));
arcs.enter()
.append("path")
.attr("stroke", "white")
.attr("stroke-width", 0.8)
.attr("fill", function(d, i) { return color(i); })
.attr("d", arc)
.each(function(d) { return this.current = d; });
var sliceLabel = label_group.selectAll("text")
.data(donut(data));
sliceLabel.enter()
.append("text")
.attr("class", "arcLabel")
.attr("transform", function(d) { return "translate(" + (arc.centroid(d)) + ")"; })
.attr("text-anchor", "middle")
.style("fill-opacity", function(d) {
if (d.value === 0) { return 1e-6; }
else { return 1; }
})
.text(function(d) { return d.data.label; });
完成JSFIDLE:
向图表中添加新数据的干净方法是什么?要使转换顺利进行,还需要将最初使用的代码添加到更新函数中。在中间工作 还有一些让人高兴的代码——这也是更新函数中需要用到的:
.enter()
.append("path")
.attr("stroke", "white")
.attr("stroke-width", 0.8)
.attr("fill", function(d, i) { return color(i); })
.attr("d", arc)
.each(function(d) { return this.current = d; });
.enter()
.append("text")
.attr("class", "arcLabel")
.attr("transform", function(d) { return "translate(" + (arc.centroid(d)) + ")"; })
.attr("text-anchor", "middle")
.style("fill-opacity", function(d) {
if (d.value === 0) { return 1e-6; }
else { return 1; }
})
.text(function(d) { return d.data.label; });
要使转换顺利进行,还需要将最初使用的代码添加到更新函数中。在中间工作 还有一些让人高兴的代码——这也是更新函数中需要用到的:
.enter()
.append("path")
.attr("stroke", "white")
.attr("stroke-width", 0.8)
.attr("fill", function(d, i) { return color(i); })
.attr("d", arc)
.each(function(d) { return this.current = d; });
.enter()
.append("text")
.attr("class", "arcLabel")
.attr("transform", function(d) { return "translate(" + (arc.centroid(d)) + ")"; })
.attr("text-anchor", "middle")
.style("fill-opacity", function(d) {
if (d.value === 0) { return 1e-6; }
else { return 1; }
})
.text(function(d) { return d.data.label; });
不确定您所说的分组弧是什么意思。对于添加新数据,你的意思是什么?@LarsKotthoff。如果你这样回答,我很乐意接受你的回答。谢谢。我不知道你说的分组弧是什么意思。对于添加新数据,你的意思是什么?@LarsKotthoff。如果你这样回答,我很乐意接受你的回答。谢谢