D3 v4 更新条形图不绘制最后一个条形图

詹姆斯·霍兰德

我是 D3 的新手,javascript 不是我的第一语言,所以我会提前道歉,因为我可能没有使用最佳的 js 实践。

我正在尝试重新创建此条形图,该条形图将循环遍历数据集,每次添加条形;但试图将其修改为 D3 v4。

https://bl.ocks.org/RandomEtc/cff3610e7dd47bef2d01

除了它会绘制最后一个条形图外,我已经让它大部分工作了。它将在 x 轴上为它做一个点;但没有出现条形图。

在此处输入图片说明

https://jsfiddle.net/jimdholland/07p8z8pb/35/

据我所知,我的迭代函数正在获取最后一个元素和数据值。

function cycler(data) {
    var slices = [];
  for (var i = 0; i < data.length; i++) {
    slices.push(data.slice(0, i+1));
  } //End for loop
  slices.forEach(function(slice, index){
    setTimeout(function(){
        drawChart(slice);
      console.log(slice);
    }, index * 300);
  }); //End for Each
};  // End cycler function

我创建了一个绘制图形的函数,我认为它可能是因为我没有正确清除旧数据。

function drawChart(data) {
  x.domain(data.map(function(d) { return d.Word; }));
  y.domain([0, d3.max(data, function(d) { return d.Positive; })]);

  svg.select(".xAxis").transition().duration(300).call(d3.axisBottom(x));
  svg.select(".yAxis").transition().duration(300).call(d3.axisLeft(y));

  //svg.select('.xaxis').transition().duration(300).call(xAxis);
  var bar = svg.selectAll("rect").data(data);

  bar.exit()
    .transition()
    .duration(300)
    .attr("y", innerHeight)
    .attr("height", 0)
    .style('fill-opacity', 1e-6)
    .remove();

  bar.enter().append("rect")
    .attr("class", "bar")
    .merge(bar)
    .attr("y", innerHeight)
    .attr("height", 0);

  bar.transition().duration(300)
    .attr("x", function(d) {return x(d.Word); })
    .attr("width", x.bandwidth())
    .attr("y", function(d) {return y(d.Positive); })
    .attr("height", function(d) {return height - y(d.Positive); });

};

感谢您的任何帮助,我也愿意接受更好的实践来编写我的 D3 代码。

西罗夫多

里面的cycler()功能,你只需要改变的for循环<<=

for (var i = 0; i <= data.length; i++) {
    slices.push(data.slice(0, i+1));
  }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章