Вот код: sfdata - это просто данные точечного огня в формате json, который работает нормально
При обновлении я пробовал svg.selectAll ('g'), но все же не удаляет , Нужно ли создавать идентификаторы для всех g элементов, чтобы удалить его, используя в качестве идентификатора?
var svg = d3.select("svg").attr("class", "svg-content"),
width = +svg.attr("width"),
height = +svg.attr("height"),
innerRadius = 100,
outerRadius = Math.min(width, height) * 0.30
function updateAll (sfdata){
svg.selectAll("g").exit().remove();
g = svg.append("g")
.attr("transform", "translate(" + width / 2 + "," + height * 0.5 + ")")
.attr("id","geez");
var herenow = g.append("g")
.selectAll("g")
.data(d3.stack().keys(data.columns.slice(1,-1))(data))
.enter().append("g")
.attr("fill", function(d) { return z(d.key); })
.selectAll("path")
.data(function(d) { return d; })
.enter().append("path")
.attr("d", d3.arc()
.innerRadius(function(d) { return y(d[0]); })
.outerRadius(function(d) { return y(d[1]); })
.startAngle(function(d) { return x(d.data.category); })
.endAngle(function(d) { return x(d.data.category) + x.bandwidth(); })
.padAngle(0.01)
.padRadius(innerRadius));
var label = g.append("g")
.selectAll("g")
.data(category_list)
.enter().append("g")
.attr("text-anchor", "middle")
.attr("transform", function(d) { return "rotate(" + ((x(d) + x.bandwidth() / 2) * 180 / Math.PI - 90) + ")translate(" + innerRadius + ",0)"; });
var legend = g.append("g")
.selectAll("g")
.data(data.columns.slice(1).reverse())
.enter().append("g")
.attr("transform", function(d, i) { return "translate(-40," + (i - (data.columns.length - 1) / 2) * 7 + ")"; });
};
updateAll(sfdata);
};
ссылка на редактируемую версию - https://blockbuilder.org/Shribro/44104761a5cdbed87df5ad652fe0b47f