我有两个不同的数据集,我试图用第一组创建饼图,然后监听事件并转换到第二组。如何使用d3.js更新饼图
我可以使用此代码
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的一般更新模式,但我还不太了解它。
如果任何人有任何建议,就如何解决我的问题或改善我的代码,那么它的大加赞赏:)
感谢
感谢您的回答,它清除了一些东西。除了每次代码重新绘制所有路径之外,一切正在运行。我想增强它的功能,如http://bl.ocks.org/mbostock/5681842。我可以在这里粘贴更多的代码供您查看吗?我遇到的唯一问题是由于某种原因,饼图不会转换。 –
不确定它是否是您当前的问题,但您需要自定义补间来很好地内插弧角。在你链接的例子中查看arcTween()。 –
圆弧的内插正确,但不会过渡。我在这里存储角度,取自我链接的例子。 '.attrTween( “d”,progress.pie.tweenPie)'' 。每个(函数(d){this._current = d;});' –