Javascript d3重复svg';更新数据
每当用新数据填充我的图形时,就会生成一个新的svg元素。更新模式排序在新生成的svg中添加新的圆时起作用,删除的圆也会被删除。但我不明白为什么它会在数据更改时不断生成新的svg元素Javascript d3重复svg';更新数据,javascript,d3.js,svg,Javascript,D3.js,Svg,每当用新数据填充我的图形时,就会生成一个新的svg元素。更新模式排序在新生成的svg中添加新的圆时起作用,删除的圆也会被删除。但我不明白为什么它会在数据更改时不断生成新的svg元素 var margin = 20, width = 960, height = 400; var svg = d3.select('#authorities').append('svg') .attr('
var margin = 20,
width = 960,
height = 400;
var svg = d3.select('#authorities').append('svg')
.attr('width', width)
.attr('height', height);
function update(data) {
// calculate minimum/maximum for axis
var y_extent = d3.max(data, function(d){ return d.NumberOfAuthorities}) + 1;
var x_extent = d3.min(data, function(d){ return d.ReimbursementTimeline}) + 20;
// accept values between min and max extent
var x_scale = d3.scale.linear()
.range([margin, width-margin])
.domain([0, x_extent]);
var y_scale = d3.scale.linear()
.range([height-margin, margin])
.domain([0, y_extent]);
var circle = svg.selectAll('circle')
.data(data, function(d) { return d.Country; });
circle
.enter()
.append('circle')
.attr('cy', function(d){return y_scale(d.NumberOfAuthorities)})
.attr('cx', function(d){return x_scale(d.ReimbursementTimeline)})
.attr('data-country', function(d){return d.Country})
.attr('r', function(d){ return (d.NumberOfAuthorities * d.ReimbursementTimeline)/10});
circle.exit().remove();
}
update(data);
我在你的代码中看不到任何会导致这种情况发生的东西。您是否可以尝试将svg更改为
svg=d3.选择('#权限').选择全部('svg.svgCanvas').数据([0]).输入().追加('svg').属性('class','svgCanvas').属性('width',width.).属性('height',height)代码>基本上,这将确保svg创建行不能创建多个svg。如果问题仍然存在,我认为您必须在其他地方寻找解决方案。是的,正如@JSBob所说,您在上面发布的代码片段中没有任何内容会创建重复的svg
元素。你能给出一个可复制的例子吗?我在你的代码中看不到任何会导致这种情况发生的东西。您是否可以尝试将svg更改为svg=d3.选择('#权限').选择全部('svg.svgCanvas').数据([0]).输入().追加('svg').属性('class','svgCanvas').属性('width',width.).属性('height',height)代码>基本上,这将确保svg创建行不能创建多个svg。如果问题仍然存在,我认为您必须在其他地方寻找解决方案。是的,正如@JSBob所说,您在上面发布的代码片段中没有任何内容会创建重复的svg
元素。你能提供一个可复制的例子吗?