【发布时间】:2016-03-09 09:33:33
【问题描述】:
我创建了一个 d3 圆环图。这是我的代码:
var width = 480;
var height = 480;
var radius = Math.min(width, height) / 2;
var doughnutWidth = 30;
var color = d3.scale.category10();
var arc = d3.svg.arc()
.outerRadius(radius - 10)
.innerRadius(radius - 70);
var pie = d3.layout.pie()
.sort(null)
.value(function(d) { return d[1]; });
var dataset = settings.dataset;
console.log(dataset);
var svg = d3.select("body")
.append("svg")
.attr("width", width)
.attr("height", height)
.append("g")
.attr("transform", "translate(" + width / 2 + "," + height / 2 + ")");
var path = svg.selectAll('path')
.data(pie(dataset))
.enter()
.append('path')
.attr('d', arc)
.attr('fill', function(d, i) {
return color(d.data[0]);
})
我的网页上有一个简单的表单,其中显示了一个带有多个选项的下拉菜单。每次用户更改表单上的值时,都会向我的脚本 (settings.dataset) 发送一个新数据集,并在页面上重新绘制甜甜圈。
问题是,前一个数据集中的一些值保留在 DOM 中。在下面的控制台输出中,您可以看到第二个数据集只有两个元素。第三个来自之前的数据集。这弄乱了图表,因为它显示了一个不应该存在的值。
我的问题:如何清除旧值?我已经阅读了.exit() 和.remove(),但我无法理解这些方法。
【问题讨论】:
-
所以你上面粘贴的代码每次都会在 udate 执行?
-
是的,每次用户在我的表单上选择不同的选项时都会调用该脚本。
-
我可以看到的一个问题是 d3.select("body") .append("svg") 这意味着您每次更新时都会附加 svg。执行 d3.select("svg").remove() 以确保在更新时将其删除。
-
将该行添加到脚本顶部?
-
这里有一个很好的教程:jonsadka.com/blog/…
标签: d3.js