D3.js 无头数据上的d3堆栈
我的csv是动态生成的,没有任何标题,因为每次运行的列数和行数都不同。下面是一个例子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的聚集堆叠条形图,每对有两个堆叠条形图
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-这将使以后在连接到数据等时更容易处理数据。但是,当然,对于这个问题还有其他解决方案:)