我正在研究D3js中的转换,试图让他们使用从a Mike Bostock example派生的简单饼图工作。D3饼图转换
我想将饼图中的数据从数据转换为data2,但图表不更新。
这是过渡声明:
path.selectAll("path").data(pie(data2)).transition().duration(2000);
我缺少什么?
编辑
我已经得到了它与下面的工作。现在我想明白为什么这是行得通的。我理解.attr(“d”,arc)部分,但为什么我需要选择All(“path”)?
path.selectAll("path").data(pie(data2)).transition().duration(2000).attr("d",arc);
编辑完
完整的代码(JSFiddle here):
var width = 200,
height = 200,
radius = Math.min(width, height)/2;
var color = d3.scale.category20();
var data = [2, 19, 18, 99, 100];
var data2 = [100, 1200, 20, 88, 12];
var pie, arc, svg, path, data;
var chartCanvas = d3.select("#chart")
.append("svg")
.attr("width", width)
.attr("height", height);
var path = chartCanvas
.append("g")
.attr("transform", "translate(" + width/2 + "," + height/2 + ")");
function setupPieChart() {
pie = d3.layout.pie()
.value(function (d) {
return d;
})
.sort(null);
arc = d3.svg.arc()
.innerRadius(radius - 100)
.outerRadius(radius - 20)
path
.selectAll("path")
.data(pie(data))
.enter()
.append("path")
.attr("fill", function (d, i) {
return color(i);
})
.attr("d", arc)
.each(function (d) {
this._current = d;
}); // store the initial angles
console.log(path);
}
setupPieChart();
console.log(path);
path.selectAll("path").data(pie(data2)).transition().duration(2000);
迈克·博斯托克的例子和你的例子有明显的区别。他提供了一个['attrTween()'](https://github.com/mbostock/d3/wiki/Transitions#attrTween)回调函数,负责转换与新数据值对应的路径的“d”属性。由于您的代码缺少此功能,因此D3无法确定您想要转换的内容。 – altocumulus
@altocumulus,谢谢,我改变了这一点。为什么我需要.selectAll(“路径”)才能使其工作? – seb