【发布时间】:2021-08-10 17:45:40
【问题描述】:
我有一个堆积条形图,可以使用下拉菜单进行更新和过滤。当图表首次呈现时我没有问题,但是当我取消选中某个选项时,矩形不会被删除。
我在删除后检查了数组,它确实从数组中删除了。这里的问题是rect 被移到了最左边。 x 轴确实会更新,并且与该对象关联的文本会被删除。
我的感觉是我的选择有问题,但我很困惑,因为我有代表每个对象的系列的rect 和g。我不确定在删除元素时是否选择了正确的对象。
我的代码:Stacked bar chart with filter
这是删除一项后图表的样子:
如您所见,rect 仍然存在,但移到了左侧。
我已经包含了我的代码的重要部分。任何关于如何使我的代码在 Plunker 上运行的反馈都非常感谢
d3.selectAll("input").on("change", function() {
var paragraphID = d3.select(this).attr("id");
paragraphID = String(paragraphID);
if (this.checked) {
if (paragraphID === 'A') {
data.push({
production_company: "A",
Pass: 50,
Fail: 65,
total: 11
});
}
} else {
data = data.filter(d => d.production_company !== paragraphID);
}
xScale_production.domain(data.map(function(d) {
return d.production_company;
}));
yScale_production.domain([0, d3.max(series_production, d => d3.max(d, d => d[1]))]);
var group = svg_stack_production.selectAll("g").data(series_production);
var mbars = group.selectAll("rect").data(d => d);
mbars.enter()
.append("rect")
.attr("x", width)
.attr("y", d => yScale_production(d[1]))
.attr("width", xScale_production.bandwidth())
.merge(mbars)
.attr("x", (d, i) => xScale_production(d.data.production_company))
.attr("y", d => yScale_production(d[1]))
.attr("width", xScale_production.bandwidth())
.attr("height", d => yScale_production(d[0]) - yScale_production(d[1]));
group.selectAll("g")
.exit()
.remove();
mbars.selectAll("rect").exit().remove()
});
【问题讨论】:
标签: javascript jquery d3.js