[英]d3 v4: Stacking nested data?
我有一堆数据可以嵌套到几个类别中,例如:
{id: 1, type: A},
{id: 2, type: A},
{id: 1, type: B},
{id: 1, type: A},
{id: 2, type: B}
将此数据嵌套在id
会给出嵌套数据,其中id
为键, values
数组包含所有原始值。 我需要的是一个堆叠图表,显示id 1有两个类型A和一个B类出现,id 2有一个,等等。这是我正在使用的代码:
var nested = d3.nest()
.key( function(d) {
return d.Id
})
.entries(data);
var stack = d3.stack()
.keys(['A','B'])
.offset(d3.stackOffsetExpand);
我希望这些百分比因此是stackOffsetExpand
。 然而,这给了我空堆栈值,大概是因为我希望堆栈函数使用的type
字段隐藏在values
数组中。 使用stack
调用的.value
函数,我可以看到它所看到的数据确实是每个嵌套数组的整个数据块(即key: 1, values: [{all objects with id 1 here}]
)。 我只是不知道如何使用该函数来告诉它开始计算type
属性...
这是从数据中计算百分比的一种方法。 我首先设置键,然后使用rollup
在nest
函数中rollup
。 然后,我正在计算每个键之后的百分比。
var raw_data = [{id: 1, type: "A"},
{id: 2, type: "A"},
{id: 1, type: "B"},
{id: 1, type: "A"},
{id: 2, type: "B"}];
var data = d3.nest()
.key(function(d) {return d.id;})
.rollup(function(d) { return d.length; })
.entries(raw_data);
data.forEach(function(d) {
d.percentage = d.value / raw_data.length;
console.log(d.key + ": " + d.percentage*100);
});
JSFiddle - https://jsfiddle.net/do4ym1L2/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.