我正在研究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