D3.js D3 exit().remove()在堆栈面积图上
我正在创建的堆叠面积图中的exit.remove函数有问题 请点击此处: 我有一些功能,用户可以通过单击图例矩形/颜色来启用/禁用图表中的数据。我知道数据正在根据控制台消息和Y轴变化比例进行更新,但图表中的数据没有变化。例如,如果用户取消选择失败的类别,橙色层应消失,失败和通过的层应重新调整 问题似乎出现在小提琴的第214到234行中,特别是在我调用exit.remove的地方:D3.js D3 exit().remove()在堆栈面积图上,d3.js,D3.js,我正在创建的堆叠面积图中的exit.remove函数有问题 请点击此处: 我有一些功能,用户可以通过单击图例矩形/颜色来启用/禁用图表中的数据。我知道数据正在根据控制台消息和Y轴变化比例进行更新,但图表中的数据没有变化。例如,如果用户取消选择失败的类别,橙色层应消失,失败和通过的层应重新调整 问题似乎出现在小提琴的第214到234行中,特别是在我调用exit.remove的地方: 我得到的错误是Object[Object Array]没有方法出口。我尝试将selectAll更改为select,但
我得到的错误是Object[Object Array]没有方法出口。我尝试将selectAll更改为select,但这也会产生相同的错误。提前谢谢。我终于让它工作了。下面的代码将正确更新图层:
// filter the data
var updatedData = dataSeries.filter(function(d) {
if(d.vis === "1"){
return d;
}
else {
return null;
}
});
stack(updatedData);
var sel = main_layer.select(".layer");
sel
.attr("class", function(d) { return d.key + " layer"; })
.style("fill", function(d, i) {
if(d.vis === "1") {
return z(i);
}
else return null;
})
.attr("d", function(d) {
if(d.vis === "1") {
return main_area(d.values);
}
else return null;
});
你能在.exit调用之前添加一个断点,看看主层是什么吗?从错误消息来看,它似乎被重新分配给了D3选择以外的其他对象。您需要对选择进行操作,而不是对主层进行操作-var sel=main\u layer.selectAll.layer.datalayer;sel.exit.remove;。向小提琴添加了调试语句。Lars,我也更新了你的解决方案,但是我得到了一些奇怪的结果。我将尝试调试正在发生的事情。我做了一些额外的更新。这很奇怪;过滤后的数据仍然如预期的那样通过,但当它到达第234行调用d.key时,所有键都是相同的,即:全部“失败”,而不是三个不同的键。我最终得到了这个工作…将在一分钟内发布答案。拉尔斯,谢谢你的帮助-你的建议帮助我克服了我遇到的一个主要问题。
// filter the data
var updatedData = dataSeries.filter(function(d) {
if(d.vis === "1"){
return d;
}
else {
return null;
}
});
stack(updatedData);
var sel = main_layer.select(".layer");
sel
.attr("class", function(d) { return d.key + " layer"; })
.style("fill", function(d, i) {
if(d.vis === "1") {
return z(i);
}
else return null;
})
.attr("d", function(d) {
if(d.vis === "1") {
return main_area(d.values);
}
else return null;
});