0
我正在開發堆積圖應用程序。d3.js堆積圖動畫
http://jsfiddle.net/NYEaX/174/
我把它放在一個jQuery插件內創建多個實例等等不同的屬性,並最終不同的數據源。
現在我遇到了動畫圖表欄和軸的問題。
動畫條碼
animateBars: function(selector, data){
var w = $(selector).data("width");
var h = $(selector).data("height");
var margin = methods.getMargin(h);
methods.setDimensions(w, h, margin);
//methods.setX();
//methods.setY();
//methods.setDomain(data);
var initialHeight = 0;
//var svg = d3.select(selector + " .stackedchart");
var barholder = d3.select(selector + " .barholder");
var state = barholder.selectAll(".state")
.data(data)
.enter()
.append("g")
.attr("class", "g")
.attr("x", function(d) {
return methods.x(d.Label);
})
.attr("transform", function(d) {
return "translate(" + methods.x(d.Label) + ",0)";
});
var bar = state.selectAll("rect")
.data(function(d) {
return d.blocks;
});
// Enter
bar.enter()
.append("rect")
.attr("width", methods.x.rangeBand())
.attr("y", function(d) {
return methods.y(d.y1);
})
.attr("height", function(d) {
return methods.y(d.y0) - methods.y(d.y1);
})
.style("fill", function(d) {
return methods.color(d.name);
});
// Update
bar
.attr("y", function(d) {
return methods.y(d.y1);
})
.attr("height", function(d) {
return methods.y(d.y0) - methods.y(d.y1);
})
.transition()
.duration(500)
.attr("x", function(d) {
return methods.x(d.Label);
})
.attr("width", methods.x.rangeBand())
.attr("y", function(d) {
return methods.y(d.y1);
})
.attr("height", function(d) {
return methods.y(d.y0) - methods.y(d.y1);
});
// Exit
bar.exit()
.transition()
.duration(250)
.attr("y", function(d) {
return methods.y(d.y1);
})
.attr("height", function(d) {
return methods.y(d.y0) - methods.y(d.y1);
})
.remove();
}
它似乎沒有任何區別 - http://jsfiddle.net/NYEaX/178/。我還沒有看到任何動畫疊加圖表的例子。我見過一個動畫標準條形圖的例子,但多數民衆贊成在 –
正如我所說,但這是我看到的第一個明顯的問題。你的代碼同樣存在一系列問題。另一個問題是,你要在bar.enter()區域設置bar高度,bar.enter()區域也是在bar更新中設置的,*再次*在轉換內部設置。我刪除了前兩個,並做出了這個:http://jsfiddle.net/XnngU/ – Glenn
那麼軸呢。還有一種從頭開始砌塊的方法。 「對於前者,請將y屬性設置爲最大高度而不是0: .attr(」y「,methods.height)」http://jsfiddle.net/NYEaX/168/ –