在此 plunker 中,我尝试以与 this 类似的方式更新基于新csv数据的柱形数据。
它获取新数据并更新矩形但不删除以前的数据。
我不知道代码的哪一部分没有正常工作,在之前的尝试中我省略.attr("transform", function(d) { return "translate(" + x0(d.State) + ",0)"; })
并获得最左边的一组条形图来更新和删除以前的数据,但没有其他组显示。
感谢任何帮助!
编辑:上传了一个有效的示例 here
以下是相关代码:
let bars = g.selectAll(".test")
.data(data)
bars = bars.enter().append("g")
.attr("transform", function(d) { return "translate(" + x0(d.State) + ",0)"; })
.selectAll("rect")
.data(function(d) {
return keys.map(function(key) {
return {key: key, value: d[key]};
});
})
bars = bars
.enter().append("rect")
.attr("width", x1.bandwidth())
.attr("x", function(d) { return x1(d.key); })
.attr("fill", function(d) { return z(d.key); })
.merge(bars)
bars.transition()
.duration(750)
.attr("y", function(d) { return y(d.value); })
.attr("height", function(d) { return height - y(d.value); });
bars.exit().remove();
答案 0 :(得分:1)
图表中的图层/组似乎不会根据新数据进行更新。以下是您可以对酒吧进行的一些更改。输入,更新和退出代码:
var barGroups = g.selectAll("g.layer").data(data);
barGroups.enter().append("g").classed('layer', true)
.attr("transform", function(d) { return "translate(" + x0(d.State) + ",0)"; });
barGroups.exit().remove();
var bars = g.selectAll("g.layer").selectAll("rect")
.data(function(d) {
return keys.map(function(key) {
return {key: key, value: d[key]};
});
});
bars.enter().append("rect").attr("width", x1.bandwidth())
.attr("x", function(d) { return x1(d.key); })
.attr("fill", function(d) { return z(d.key); })
.transition().duration(750)
.attr("y", function(d) { return y(d.value); })
.attr("height", function(d) { return height - y(d.value); });
bars
.transition().duration(750)
.attr("y", function(d) { return y(d.value); })
.attr("height", function(d) { return height - y(d.value); });
bars.exit().remove();
因此,如果您查看代码,首先处理条形图组/图层,然后处理实际条形图,即矩形。如果这不起作用,请告诉我。
希望这会有所帮助。 :)