我正在将转换应用于我的图表。但我正在努力让他们产生任何结果。我试图按照.enter()
,.update()
,.exit()
的模式。d3js图表动画无效
我想完成的是让一系列数据消失。当人们点击图例(选择/取消选择)时,我希望发生这种情况,但现在为了方便起见,我将该功能附加到按钮上。选择按钮后,所有绿条都会出现,所有蓝条都会离开。
让我困惑的部分是这是一张配对的条形图。所以事情已经集合在一起,并增加了一层额外的复杂性。
d3.select("#change").on("click", updateBars);
function updateBars()
{
xScale.domain(d3.range(dataset.length)).rangeRoundBands([0, w], 0.05);
yScale.domain([0, d3.max(dataset, function(d) { return (d.local > d.global) ? d.local : d.global;})]);
var bars = svg.selectAll("sets")
.data(dataset);
bars.enter()
.attr("x", w)
.attr("y", function(d){
return h - yScale(d.global);
})
.attr("width", xScale.rangeBand())
.attr("height", function(d){
return yScale(d.global);
})
.attr("fill", colors[0][1])
;
//Update
bars.transition()
.duration(500)
.attr("x", function(d, i) {
return xScale(i);
})
.attr("y", function(d) {
return h - yScale(d.global);
})
.attr("width", xScale.rangeBand())
.attr("height", function(d) {
return yScale(d.global);
});
//Exit
bars.exit()
.transition()
.duration(500)
.attr("x", -xScale.rangeBand())
.remove();
}
我完整的代码,也可以seen here at my JSFiddle。
拉尔斯再次救援。你对重构代码的建议似乎令人望而生畏。但是,我认为这会更有意义,并且与在线示例更加一致。我认为这仍然可以让我保持数据配对/分组? – EnigmaRM 2013-04-24 21:52:43
你的例子效果很好。但为了重新添加系列,我需要重构我的代码,然后呢? (这是我的假设,该系列现在已经从dom中删除) – EnigmaRM 2013-04-24 21:54:01
您不一定需要重构,您可以将它添加回原来添加它的方式。是的,重构代码仍然可以让你保持数据分组 - 无论是我用草图还是通过使用[嵌套选择](http://bost.ocks.org/mike/nest/)的方式。 – 2013-04-25 08:20:06