2017-02-15 30 views
0

我很难从CSV文件中获取两列,我正在计划构建基本条形图。我打算在一个数组中使用两个数组(每列一个),以便构建一个条形图。刚开始使用D3,你可以知道。D3载入CSV文件,然后只使用特定列

当前加载数据给我一个对象数组,这是一个混乱得到两列键值对。我不知道我的想法是正确的......

我看到这个类似的问题:

d3 - load two specific columns from csv file

但如何,我会用选项并输入()来完成我的目标是什么?

+1

你为什么不干脆每个属性映射? –

+2

你能分享一下你到目前为止尝试过的一些代码吗?请记住,在将数据结构提供给d3之前,您可以操作数据结构,如果这样可以在绘制可视化文件时更轻松地进行处理 – Nobita

回答

3

您无法只加载更大CSV的2列,但可以加载整个事物并提取所需的列。

说你的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' } 
    ] 
*/ 

I.e.上面的代码产生了一个新的对象数组,每个对象只有两个道具。

如果你只想每列值的数组 - 而不是对象与两列的价值观 - 你可以:

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']