Я пытаюсь обновить содержимое своей веб-страницы, когда пользователь нажимает кнопку с помощью D3. К сожалению, я вижу, что на экране отображаются новые данные, но старые данные не забываются, хотя я использую .exit(). Мой код обновления находится ниже:D3 - обновить данные гистограммы onclick
function updateData(param)
{
// Get the data again
d3.csv("bar-data2.csv", function(error, data) {
data.forEach(function(d) {
d.date = parseDate(d.date);
d.value = +d.value;
});
alert(data.length);
// Scale the range of the data again
x.domain(data.map(function(d) { return d.date; }));
y.domain([0, d3.max(data, function(d) { return d.value; })]);
// Select the section we want to apply our changes to
var svg = d3.select("body").transition();
d3.selectAll("bar")
.data(data, function(d) { return(d); })
.order()
.exit()
.transition()
//.delay(1000)
.remove();
// Make the changes
svg.selectAll("bar")
.data(data)
.enter().append("rect")
.style("fill", "orange")
.attr("x", function(d) { return x(d.date); })
.attr("width", x.rangeBand())
.attr("y", function(d) { return y(d.value); })
.attr("height", function(d) { return height - y(d.value); });
});
Любое предложение было бы высоко оценено. Большое спасибо!
Эй, спасибо за ваш ответ. Я редактировал свой вопрос со всем кодом. Я до сих пор не могу понять, где это добавить. – Crista23
В вашем текущем коде вы выбираете элементы «bar». Вы никогда не добавляете эти элементы, поэтому выбор всегда будет пустым. И вместо '.selectAll (" bar ")' дважды, вам нужно это только один раз, как в приведенном выше коде. –
О, да, это работает. Ты был прав! :) Теперь моя единственная проблема заключается в том, как я также удаляю текст поверх баров. – Crista23