如何在 D3 中检索嵌套数据集的键值
How to retrieve the key values of a nested data set in D3
我正在尝试将 D3 可视化添加到 OBIEE,我需要完成的第一个图表是多系列折线图。数据直接从 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});
有 155 行这样的数据,从 2013 年到 2015 年的不同日期。为了按类别将它们分开,然后我可以为每个类别分配一条线和颜色,我以这种方式嵌套数据:
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]
我尝试了几种方法,其中 none 行之有效。至此我快要放弃在OBIEE中添加D3了,虽然我很想实现,但是我苦苦思索,似乎完全做不到。也许我应该首先学习 Javascript 也许 D3 似乎要求我费尽心思才能理解数据管理,这对我来说太多了。
如果能提供任何帮助,我将不胜感激。很抱歉,如果我在提交问题时犯了任何错误,我会尝试正确格式化它,但这是我第一次post 在这里做任何事情。
非常感谢您,并向您致以最诚挚的问候,
安娜.
keys()
方法(当用作 nest()
的一部分时不适用)用于标准关联数组,而不是嵌套数据。您应该获取 dataGroup
的 values
并遍历每个以提取 category
属性。您的代码中可能还有其他问题,但请尝试
color.domain(d3.values(dataGroup).map(function(d) {
return d.category;
}).filter(function(key) { return key !== "date"; }));
开始
我正在尝试将 D3 可视化添加到 OBIEE,我需要完成的第一个图表是多系列折线图。数据直接从 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});
有 155 行这样的数据,从 2013 年到 2015 年的不同日期。为了按类别将它们分开,然后我可以为每个类别分配一条线和颜色,我以这种方式嵌套数据:
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]
我尝试了几种方法,其中 none 行之有效。至此我快要放弃在OBIEE中添加D3了,虽然我很想实现,但是我苦苦思索,似乎完全做不到。也许我应该首先学习 Javascript 也许 D3 似乎要求我费尽心思才能理解数据管理,这对我来说太多了。
如果能提供任何帮助,我将不胜感激。很抱歉,如果我在提交问题时犯了任何错误,我会尝试正确格式化它,但这是我第一次post 在这里做任何事情。
非常感谢您,并向您致以最诚挚的问候, 安娜.
keys()
方法(当用作 nest()
的一部分时不适用)用于标准关联数组,而不是嵌套数据。您应该获取 dataGroup
的 values
并遍历每个以提取 category
属性。您的代码中可能还有其他问题,但请尝试
color.domain(d3.values(dataGroup).map(function(d) {
return d.category;
}).filter(function(key) { return key !== "date"; }));
开始