Javascript 如何更新发散堆积条形图d3js中的数据

Javascript 如何更新发散堆积条形图d3js中的数据,javascript,d3.js,Javascript,D3.js,我制作了一个从一个csv文件到另一个csv文件的更新程序,yaxis会相应地更新,但矩形不会 函数(d){return Math.abs(y(d[0]))-y(d[1]);}部分代码仍然包含来自上一个文件的旧数据(我猜是这样) 我猜这是因为我没有在updateData()函数中声明.data(series),我记得在另一个图表中做过类似的操作 g.selectAll(".bar").data(series).transition() 等等。。。 但这在这个图表中不起作用 我搞不懂,谢谢你的帮

我制作了一个从一个csv文件到另一个csv文件的更新程序,yaxis会相应地更新,但矩形不会

函数(d){return Math.abs(y(d[0]))-y(d[1]);}部分代码仍然包含来自上一个文件的旧数据(我猜是这样)

我猜这是因为我没有在
updateData()
函数中声明
.data(series)
,我记得在另一个图表中做过类似的操作

g.selectAll(".bar").data(series).transition() 
等等。。。 但这在这个图表中不起作用


我搞不懂,谢谢你的帮助

问题是您没有将新数据连接到现有条

为了使这项工作顺利进行,在将序列加入到g元素时,您需要为数据类别指定一个键,以确保一致性(尽管我注意到category-1在第一个数据集中为正,在第二个数据集中为负,但我想这是测试数据)

以下是更新的plunkr(),相关代码如下所示:

g.append("g")
        .selectAll("g")
        .data(series, function(d){ return d.key  }) //add function to assign a key
        .enter().append("g")
        .attr("class", "bars")  //so its easy to select later on
 //etc
...



function updateData() {

    d3.csv("data2.csv", type, function(error, data) {

        ///etc      

        let bars = d3.selectAll(".bars")  //select the g elements

        bars.data(series, function(d){ return d.key  }) //join the new data
        .selectAll(".bar")
        .data(function(d) { return d; })
        .transition()   
      .duration(750)
            .attr("y", function(d) { return y(d[1]); })
            .attr("height", function(d) { return Math.abs(y(d[0])) - y(d[1]); });