在D3

时间:2017-06-10 15:08:49

标签: csv d3.js

我正在尝试使用csv函数解析d3中的数据。我试图在处理过程中为每个数据点赋予一个新属性(Region)。在CSV函数之外,我定义了一个应该采用数据点的函数,检查状态是否为Alabama,如果是,则将Region属性分配给“North”或“South”字符串。

var parseRegion = (function(d){
        if(d.State === "Alabama"){
        return "South";
       }
      else {
        return "North";
        }
    });

但是,当我运行代码时,会为每个数据点分配一个“Region”属性,该属性分配给函数本身。换句话说,它被赋予实际代码,而不是返回值。我做错了什么?

d3.csv("data.csv").get(function(error,data){
if (error) throw error;

data.forEach(function(d){
   d.Deaths = +d.Deaths;
   d.Population = +d.Population;
   d.Year = parseDate(d.Year);
   d.Region = parseRegion;
});

感谢您提供的任何帮助。最终我会在阿拉巴马州之外添加其他州。

1 个答案:

答案 0 :(得分:2)

您的问题是您没有调用您定义的parseRegion函数。

所以你需要

 d.Region = parseRegion(d);

更一般地说,d3.csv提供了一种在不使用forEach的情况下解析数据的方法。您可以执行以下操作:

d3.csv("data.csv")
    .row(function(d) {
    //Code to parse data row by row goes here
    })
    .get(function(error,data){
    //Data is now the whole parsed dataset
    });