gpt4 book ai didi

d3.js - 填补 D3 数组嵌套中的空白

转载 作者:行者123 更新时间:2023-12-04 02:19:09 25 4
gpt4 key购买 nike

我有一个由日期和一些值组成的数组或对象:

var flatData = [
{ "date": "2012-05-26", "product": "apple" },
{ "date": "2012-07-03", "product": "orange" },
...
]

我正在尝试使用 d3.nest() 按年然后按月获取这些对象的计数。
var nestedData = d3.nest()
.key(function(d) { return d.date.split('-')[0]; }) // key is the year
.sortKeys(d3.ascending)
.key(function(d) {
var splitDate = d.date.split('-');
return splitDate[0] + '-' + splitDate[1]; // key is year-month
})
.sortKeys(d3.ascending)
.rollup(function(d) {
return d.length;
})
.entries(flatData);

这几乎有效,除了当一个月没有对象时,嵌套数据不包含指示该月计数为 0 的记录。有什么技巧可以告诉 D3 填补这些空白吗?

(当然,我总是可以用乏味的方式来做,即遍历所有嵌套级别并创建一个新的数据结构来填补空白。)

最佳答案

尝试在减少后添加缺失的数据点:

var flatData = [
{ "date": "2012-05-26", "product": "apple" },
{ "date": "2012-07-03", "product": "orange" }]

nestedData = d3.nest()
.key(function(d) { return d.date.split('-')[0]; }) // key is the year
.sortKeys(d3.ascending)
.key(function(d) {
var splitDate = d.date.split('-');
return splitDate[0] + '-' + splitDate[1]; // key is year-month
})
.sortKeys(d3.ascending)
.rollup(function(d) {
return d.length;
})
.entries(flatData);


yMFormat = d3.time.format('%Y-%m')

makeAllKeys = function(year) {
allKeys = [];
for(var i = 0; i<12;i++) { // 12 months in a year
allKeys.push(yMFormat(new Date(year,i,1)));
}
return allKeys;
}

nestedData = nestedData.map(function(yearObj) {
return {
values: makeAllKeys(+yearObj.key).map(function(k) {
value = yearObj.values.filter(function(v) { return v.key == k; })[0];
return value || ({key: k, values: 0});
})
};
});

关于d3.js - 填补 D3 数组嵌套中的空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17415406/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com