我有兩個不同的數據集,我試圖用第一組創建餅圖,然後監聽事件並轉換到第二組。如何使用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;});' –