我有两个不同的数据集,我试图用第一个数据集创建饼图,然后监听一个事件并转换到第二个数据集。
我可以使用此代码从第一组数据成功创建饼图
var data = [[70, 30],[60, 40],[50, 50],[95, 5],[87, 13]];
progress.pie.vars.svg = d3.select( progress.pie.vars.pieEl ).selectAll("svg")
.data(data)
.enter()
.append("svg")
.attr("width", 150)
.attr("height", 150)
.each(function(d) { this.currentAngles = d; }); // store the initial angles;
progress.pie.vars.path = progress.pie.vars.svg.selectAll("path")
.data(function(d, i){ return pie(d) })
.enter().append("path")
.attr("fill", function(d, i) { return color(i); })
.attr("transform", "translate(" + 75 + ", " + 75 + ")")
.attr("d", arc);
注意:我在这里使用硬编码数据,我可以使用 JSON 进行复制,但我想简化一些事情,以便让转换工作。
这会创建 svg 并将它们呈现在页面上,但是当我使用其他数据集并尝试更新路径时会出现问题。像这样...
var data = [[60, 40], [10, 10, 10, 70], [30, 70], [25, 25, 25, 25], [30, 35, 35]];
progress.pie.vars.svg = progress.pie.vars.svg.selectAll("svg")
.data(data);
progress.pie.vars.path = progress.pie.vars.path
.data(function(d, i){ return pie(d) })
.enter().append("path")
.transition()
.duration(5000);
我研究过 d3 通用更新模式,但我还不太了解。
如果有人对如何解决我的问题或改进我的代码有任何建议,那么非常感谢:)
谢谢