在D3.js中嵌套数据

时间:2013-02-21 20:45:39

标签: d3.js

我正在努力熟悉D3,并且很难以正确的格式获取数据。我有一个对象数组,每个对象都有一个“日期”键,我正在尝试使用d3.nest按日期对它们进行分组,但是甚至无法使示例工作(取自https://github.com/mbostock/d3/wiki/Arrays )。我把它简化为基本要素,但代码是从d3 wiki中获取的。

var yields = [{yield: 27.00, variety: "Manchuria", year: 1931, site: "University Farm"},
              {yield: 48.87, variety: "Manchuria", year: 1931, site: "Waseca"},
              {yield: 27.43, variety: "Manchuria", year: 1932, site: "Morris"}]

var nest = d3.nest()
    .key(function(d) { return d.year; })
    .entries(yields);

根据维基,这应该按以下结构组织数据:

[{key: 1931, values: [
    {yield: 27.00, variety: "Manchuria", year: 1931, site: "University Farm"},
    {yield: 48.87, variety: "Manchuria", year: 1931, site: "Waseca"}]},
 {key: 1932, values: [
    {yield: 27.43, variety: "Manchuria", year: 1932, site: "Morris"}]}
]

但是在使用console.dir(yields)进行检查时,我得到了与使用d3.nest之前相同的扁平结构。由于我甚至无法从文档中获得示例,我不知道接下来要尝试什么。帮助一个菜鸟?

1 个答案:

答案 0 :(得分:8)

您想查看nest,而不是yieldsyields就是你传入的内容,nest就是你得到的。 yields不会改变。

d3 wiki可以用更易读的方式编写内容:

var nest = d3.nest()
    .key(function(d) { return d.year; })

var nested = nest.entries(yields);

现在,nest是一个对象,您可以重复使用年份密钥的类似数据,nested是一个yields的输出。 key函数返回嵌套对象本身,但entries返回新的嵌套数据。