使用D3.csv读取csv数据,每列都在单独的数组中

mik*_*ike 6 html csv d3.js

我是新手一般工作D3.js和html/js,我试图弄清楚如何使用d3.csv将csv文件读入单独的数组中.我有一个看起来像这样的csv文件:

cause, prevalence, disability;
cancer, .3, .4;
aids, .5, .5;
malaria, .2, .1;
Run Code Online (Sandbox Code Playgroud)

就目前而言,我正在努力为"原因","普遍性"和"残疾"创建数组.以下是我使用的代码:

<html>
  <script type="text/javascript" src="../d3/d3.js"></script>
  <script type="text/javascript" src="../d3/d3.csv.js"></script>
  <script type="text/javascript">
    d3.csv('disability.csv', function(csv){
      var cause=csv[0];
      var prevalence=csv[1];
      var disability=csv[2];
      for (i=0;i<cause.length;i++)
      {
        document.write(cause[i] + "<br />");
      }
    })
  </script>
</html>
Run Code Online (Sandbox Code Playgroud)

document.write部分只是为了测试我已读入数据.

kfo*_*for 9

看起来你的意思var cause = csv[0]是指第一个变量/列,我猜?没有看到csv文件,很难确定.

如果是这种情况,那么它不起作用的原因是javascript数组很遗憾没有简单的方法来访问单个变量/列.

csv[0]而是指你的csv 的第一.在d3的csv模块的情况下,它将是一个字典,其中包含csv中每个变量(列名)的键,例如:

console.log(csv[0]);
{ cause: 'A', prevalence: .1, disability: .5 }
Run Code Online (Sandbox Code Playgroud)

因此,如果要为每个变量/列创建单独的数组,可以执行以下操作:

var cause = [],
    prevalence = [],
    disability = [];
csv.map(function(d) {
    cause.push(d.cause);
    prevalence.push(d.prevalence);
    disability.push(d.disability);
}
Run Code Online (Sandbox Code Playgroud)

那么你将留下你想要制作的三个阵列.但是在d3中,您实际上可能只是将整个csv对象作为data您正在创建的任何内容传递,然后使用访问器函数[例如.attr('y', function(d) { return d.prevalence; })]在特定上下文中使用特定的列/变量.