D3在CSV文件中加载,然后仅使用特定列

时间:2017-02-15 07:50:44

标签: csv d3.js

我很难从CSV文件中获取两列,我计划用它来构建基本条形图。我计划在一个数组中获得2个数组(每列一个),我将用它来构建条形图。正如您所知,刚开始使用D3。

当前加载数据会获取一个对象数组,这样就可以获得两列键值对。我不确定我的想法是否正确......

我看到了类似的问题:

d3 - load two specific columns from csv file

但是我如何使用选择并输入()来实现我的目标?

1 个答案:

答案 0 :(得分:6)

您只能加载2个较大CSV的列,但您可以加载整个内容并提取所需的列。

说你的csv是这样的:

col1,col2,col3,col4
aaa1,aaa2,aaa3,aaa4
bbb1,bbb2,bbb3,bbb4
ccc1,ccc2,ccc3,ccc4

然后用

加载它
csv('my.csv', function(err, data) {
  console.log(data)
  /*
    output:
    [
      { col1:'aaa1', col2:'aaa2', col3:'aaa3', col4:'aaa4' },
      { col1:'bbb1', col2:'bbb2', col3:'bbb3', col4:'bbb4' },
      { col1:'ccc1', col2:'ccc2', col3:'ccc3', col4:'ccc4' }
    ]
  */
})

如果您只想要col2col3(并且您不想简单地将其他列的数据留在那里,这不应该是一个问题),您可以这样做:

var cols2and3 = data.map(function(d) {
  return {
    col2: d.col2,
    col3: d.col3
  }
});

console.log(cols2and3)
/*
  output:
  [
    { col2:'aaa2', col3:'aaa3' },
    { col2:'bbb2', col3:'bbb3' },
    { col2:'ccc2', col3:'ccc3' }
  ]
*/

即。上面的代码生成了一个新的对象数组,每个对象只有两个道具。

如果您只需要每列的值数组 - 而不是具有两列值的对象 - 您可以:

var col2data = data.map(function(d) { return d.col2 }
var col3data = data.map(function(d) { return d.col3 }

console.log(col2) // outputs: ['aaa2', 'bbb2', 'ccc2']