[英]How to update a grouped bar-chart in d3js
在这种plunker我已经尝试基于以类似的方式,以新的CSV数据更新吧这个 。
它获取新数据并更新矩形,但不会删除先前的数据。
我不知道代码的哪一部分不能正常工作,在以前的尝试中,我省略了.attr("transform", function(d) { return "translate(" + x0(d.State) + ",0)"; })
并获得最左边的一组条形图以更新和删除先前的数据,但其他组均未显示。
感谢任何帮助!
编辑: 在这里上传了一个工作示例
以下是相关代码:
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();
图表中的图层/组似乎没有根据新数据进行更新。 您可以对酒吧的输入,更新和退出代码进行以下更改:
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();
因此,如果您看一下代码,将首先处理钢筋组/层,然后再处理实际的钢筋,即矩形。 让我知道这是否无效。
希望这可以帮助。 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.