D3.js 无头数据上的d3堆栈

D3.js 无头数据上的d3堆栈,d3.js,D3.js,我的csv是动态生成的,没有任何标题,因为每次运行的列数和行数都不同。下面是一个例子 A, 30, 40, 35, 25 B, 25, 35, 45, 35 如果有标题,则如下所示 Age1, Age2, Age1, Age2 A, 30, 40, 35, 25 B, 25, 35, 45, 35 对于每一行,数据是成对的,即col和col[2]需要堆叠,col[3]和col[4]需要堆叠。目标是要有一个X轴上有a和B的聚集堆叠条形图,每对有两个堆叠条形图

我的csv是动态生成的,没有任何标题,因为每次运行的列数和行数都不同。下面是一个例子

A, 30, 40, 35, 25
B, 25, 35, 45, 35
如果有标题,则如下所示

   Age1, Age2, Age1, Age2
A,  30,   40,   35,   25
B,  25,   35,   45,   35
对于每一行,数据是成对的,即col和col[2]需要堆叠,col[3]和col[4]需要堆叠。目标是要有一个X轴上有a和B的聚集堆叠条形图,每对有两个堆叠条形图


我试着按照上的示例进行操作,但我无法获得在没有标题/键的情况下如何使用stack函数。

您可以使用d3.text加载CSV数据,然后在文本上迭代以创建具有命名值的对象数组,然后可以对这些对象进行堆叠,或者使用数据在d3中通常执行的任何操作

d3.text("data.csv", function(text) {

    console.log(text);

    var data = []

    d3.csvParseRows(text).forEach(function(row) {
      let obj = {}
        row.forEach(function(value, i) {    
        let pairIndex = Math.floor((i - 1) / 2)
        //assume first value is the index or name for the row, eg A, B, etc
        if (i == 0) { 
          obj.index = value 
        } 
        else if (i % 2 == 0) {           
          let v = "age2-" + pairIndex
          obj[v] = value
        } else {
          let v = "age1-" + pairIndex
          obj[v] = value
        }
      });
      data.push(obj)
    });

    console.log(data);
// continue with your code

因此,本质上是从无头数据中创建一个带有头的数据Yep-这将使以后在连接到数据等时更容易处理数据。但是,当然,对于这个问题还有其他解决方案:)