【发布时间】:2014-06-13 16:02:23
【问题描述】:
我在这个 jsFiddle here 上有一些代码,它为名为“值”的数据数组生成直方图。这一切都很好。
当我想用一个名为“newData”的新数据数组来更新这个直方图时,出现了问题。我正在尝试遵守enter()、update()、exit() D3 策略(我显然是非常新的)。确实会出现动画,但正如您从小提琴中看到的那样,它只是将所有内容压缩到右上角。有人能指出我在这段代码(更新)中做错了什么吗?
//Animations
d3.select('#new')
.on('click', function(d,i) {
var newHist = d3.layout.histogram().bins(x.ticks(bins))(newData);
var rect = svg.selectAll(".bar")
.data(values, function(d) { return d; });
// enter
rect.enter().insert("g", "g")
.attr("class", "bar")
.attr("transform", function(d) { return "translate(" + x(d) + "," + y(d) + ")"; });
rect.enter().append("rect")
.attr("x", 1)
.attr("width", w)
.attr("height", function(d) { return y(d); });
rect.enter().append("text")
.attr("dy", ".75em")
.attr("y", 6)
.attr("x", x(histogram[0].dx) / 2)
.attr("text-anchor", "middle")
.text(function(d) { return formatCount(d); });
// update
svg.selectAll('.bar')
.data(newHist)
.transition()
.duration(3000)
.attr("transform", function(d) { return "translate(" + x(d.x) + "," + y(d.y) + ")"; });
svg.selectAll("rect")
.data(newHist)
.transition()
.duration(3000)
.attr("height", function(d) { return height - y(d.y); });
svg.selectAll("text")
.data(newHist)
.transition()
.duration(3000)
.text(function(d) { return formatCount(d.y); });
// exit
rect.exit()
.remove();
});
整个代码在上面链接的 JSFiddle 上。谢谢!
【问题讨论】:
标签: javascript d3.js histogram