gpt4 book ai didi

javascript - d3j : Remove a data set

转载 作者:行者123 更新时间:2023-12-03 10:51:06 25 4
gpt4 key购买 nike

我想在取消选中复选框时删除曲线。我尝试过但没有成功:

function drawdata(fileno,draw){
var name="circle"+fileno;
if (draw) {
console.log("Drawing file "+fileno+ " ("+files[fileno]+")");
svg.selectAll(name) .data(datasets[fileno]) .enter() .append("circle")
.attr('cx',function(a){ return xscales[xval](a[xval]); })
.attr('cy',function(a){ return yscales[yval](a[yval]); })
.attr('r',3)
.style("opacity", 1)
;
} else {
console.log("removing file "+fileno);
svg.selectAll(name).data(datasets[fileno]).exit().remove();
}
}

第一部分工作良好(即,如果我选中一个复选框,则会绘制文件),但是当我取消选中它时,它不会从 svg 中删除。我想我不太了解导出。有人能指出哪里出了问题吗?谢谢。

示例 jsfiddle 代码: http://jsfiddle.net/datavis/530h1qLw/11/#&togetherjs=Rkz5QyDgJm

最佳答案

更新:

通过添加 fiddle ,可以很容易地看到发生了什么。当您执行 svg.selectAll(name) 时,它会返回一个空选择。原因是因为 circleN 中没有元素。 circleN 不是有效的 DOM 元素,并且它们都不存在,因此选择将失败。

如果您对 cds 函数进行以下更改,您将看到您的代码现在可以正常工作:

function cds(el) {
name = "circle" + el.id;
if (el.checked) {
svg.selectAll(name)
.data(dataset[el.id])
.enter().append("circle")
.attr('cx', function (a) { return xscale(a[0]); })
.attr('cy', function (a) { return yscale(a[1]); })
.attr('r', 3)
.attr('class', name)
.style("opacity", 1);
} else {
svg.selectAll("circle." + name).remove();
}
}

此函数中有两个值得注意的变化:

  1. .attr('class', name) 添加到创建新 DOM 元素的代码中。这会将一个类添加到圆圈中,以便在删除它们时更容易进行选择。
  2. 将删除它们的行更新为 svg.selectAll("circle."+ name).remove();,这将在您取消选中单选框时删除圆圈。

关于javascript - d3j : Remove a data set,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28415677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com