javascript - 如何将 D3 nest() 中缺少的键的计数设置为零
问题描述
我正在使用 d3.js 对来自 .csv 文件的数据进行分组。我正在尝试使用d3.nest()
按年份然后按状态获取记录计数。
我的test.csv
包含
Year,Project,Status
2018,Project 1,InProgress
2018,Project 2,InProgress
2018,Project 3,InProgress
2017,Project 4,InProgress
2017,Project 5,Completed
2017,Project 6,InProgress
2016,Project 7,Completed
我的代码如下所示:
d3.csv("https://raw.githubusercontent.com/benubah/rconsortium_projects/master/test.csv")
.then(function(data) {
var stat = d3.nest()
.key(function(d) { return d.Year })
.key(function(d) { return d.Status })
.rollup(function(v) { return v.length })
.entries(data);
console.log(stat);
});
<script src="https://d3js.org/d3.v5.js"></script>
我期望的输出(由于 2018 年没有已完成的项目,将已完成的键设置为 0):
[Object {
key: "2018",
values: [Object {
key: "InProgress",
value: 3
}, Object {
key: "Completed",
value: 0
}]
},
Object {
key: "2017",
values: [Object {
key: "InProgress",
value: 2
}, Object {
key: "Completed",
value: 1
}]
},
Object {
key: "2016",
values: [Object {
key: "InProgress",
value: 0
}, Object {
key: "Completed",
value: 1
}]
}]
但我得到的实际输出是:
[Object {
key: "2018",
values: [Object {
key: "InProgress",
value: 3
}]
},
Object {
key: "2017",
values: [Object {
key: "InProgress",
value: 2
}, Object {
key: "Completed",
value: 1
}]
},
Object {
key: "2016",
values: [Object {
key: "Completed",
value: 1
}]
}]
解决方案
原因是那些必须产生带有 条目的年份/状态组合values: 0
在源数据中不存在。d3 只迭代现有的组合......
所以你必须用你自己的代码来填补空白。它可以通过多种方式完成。一种是链接 a ,在必要时.map
添加缺失的条目:values
d3.csv("https://raw.githubusercontent.com/benubah/rconsortium_projects/master/test.csv")
.then(function(data) {
var stat = d3.nest()
.key(d => d.Year)
.key(d => d.Status)
.rollup(v => v.length)
.entries(data)
.map(function (obj) {
if (obj.values.length === 1) {
if (obj.values[0].key == "Completed") {
obj.values.unshift({ key: "InProgress", values: 0 });
} else {
obj.values.push({ key: "Completed", values: 0 });
}
}
return obj;
});
console.log(stat);
});
<script src="https://d3js.org/d3.v5.js"></script>
推荐阅读
- sql - 如何在数据库中选择每个月的最大日期
- java - 使用阵列适配器强制关闭获取 JSON 并显示在列表视图上
- android - 根据他的非固定元素高度设置 ListView 的大小
- excel - 文本按空格和一半文本分割
- python - 如何修复 'print("%s:" % h, end=" ", file=self._fp)' SyntaxError: python2.7 中的无效语法
- javascript - 通过使用与上传文件夹相同的文件夹结构进行压缩的 Javascript 上传文件夹
- ruby-on-rails - 在 Rails-5 中按数组列值分组
- linux-kernel - Linux在哪里调用摄像头驱动进行图像传输
- ios - 可以从网页 URL 和本地目录按文件名加载图像的扩展
- javascript - PHP - 内置图片视图缩放功能