如何在D3中检索嵌套数据集的键值

时间:2015-09-06 20:44:48

标签: d3.js obiee

我正在尝试向OBIEE添加D3可视化,我需要完成的第一个图是一个多系列线图。数据直接从OBIEE叙述视图中获取,格式如下:

var data = [ ];

data.push({category:"Cat1",date:"20130101",suma:9.11});
data.push({category:"Cat2",date:"20130101",suma:2.66});
data.push({category:"Cat3",date:"20130101",suma:18.00});
data.push({category:"Cat4",date:"20130101",suma:32.49});
data.push({category:"Cat5",date:"20130101",suma:37.74});

对于2013年到2015年的不同日期,共有155条线路。要按类别分隔,我可以为每个类别分配一行和颜色,我以这种方式嵌套数据:

var dataGroup = d3.nest() 
.key(function(d) {return d.category;}) 
.entries(data);

变量dataGroup是一个包含5个对象的数组,如下所示:

0: Object
key: "Cat1"
values: Array[31]
    0: Object
       category: "Cat1"
       date: "20130101"
       suma: 9.11
       __proto__: Object
   ... 
   1: Object
   key: "Cat2"
   values: Array[31]
       0: Object
       category: "Cat2"
       date: "20130101"
       suma: 2.66
       __proto__: Object
   ... ...

接下来我要做的是为类别指定颜色。

var color = d3.scale.category10();
color.domain(d3.keys(dataGroup).filter(function(key) { return key !== "date"; }));

这就是我遇到麻烦的地方。此过滤器功能的结果是:

Array[5]
0: "0"
1: "1"
2: "2"
3: "3"
4: "4"
length: 5
__proto__: Array[0]

而不是我认为我需要的是:

Array[5]
0: "Cat1"
1: "Cat2"
2: "Cat3"
3: "Cat4"
4: "Cat5"
length: 5
__proto__: Array[0]

我尝试了几种方法,但没有一种方法有效。在这一点上,我即将放弃向OBIEE添加D3,虽然我真的想实现它,但我很难理解这一点,而且我似乎完全无法做到。也许我应该首先学习Javascript,或许所有的思维弯曲,D3似乎需要了解数据管理对我来说太过分了。

我真的很感激任何帮助。如果我在提交问题时犯了任何错误,我很抱歉,我试着正确地格式化,但这是我第一次在这里发布任何内容。

非常感谢和最诚挚的问候, 安娜。

1 个答案:

答案 0 :(得分:2)

keys()方法(不是作为nest()的一部分使用时)用于标准关联数组,而不是嵌套数据。您应该使用values的{​​{1}}并遍历每个以提取dataGroup属性。您的代码中可能存在其他问题,但请尝试

category

开始