Почему старые столбцы все еще видны после перехода

#javascript #d3.js

#javascript #d3.js

Вопрос:

У меня есть гистограмма D3, в которой 5 столбцов. Когда я обновляю его, я вижу, что он переходит на правильные 3 бара, но некоторые из исходных баров остаются видимыми — как мне заставить их выйти?

Вот как это выглядит изначально:

введите описание изображения здесь

Вот как это выглядит в итоге:

введите описание изображения здесь

Темно-синие полосы правильные. Текущий код для обновления объектов «rect» выглядит следующим образом:

 var plot = d3.select("#barChartPlot")
  .datum(currentDatasetBarChart);

/* Note that here we only have to select the elements - no more appending! */

plot.selectAll("rect")
  .data(currentDatasetBarChart)
  .transition()
  .duration(750)
  .attr("x", function (d, i) {
    return xScale(i);
  })
  .attr("width", width / currentDatasetBarChart.length - barPadding)
  .attr("y", function (d) {
    return yScale( d.measure);
  })
  .attr("height", function (d) {
    return height - yScale( d.measure);
  })
  .attr("fill", colorChosen);
  

Ответ №1:

У вас есть только 3 новых столбца, поэтому количество элементов в ваших данных изменилось. Вам нужно использовать шаблон обновления.

 var rects = plot.selectAll("rect")
  .data(currentDatasetBarChart);

  rects.enter()
   .append("rect")
    //Code to style and define new rectangles.

  //Update 
  rects.update()
  .transition()
  .duration(750)
  .attr("x", function (d, i) {
    return xScale(i);
  })
  .attr("width", width / currentDatasetBarChart.length - barPadding)
  .attr("y", function (d) {
    return yScale( d.measure);
  })
  .attr("height", function (d) {
    return height - yScale( d.measure);
  })
  .attr("fill", colorChosen);

  // Remove unused rects
  rects.exit().remove();