d3使用d3.map和d3队列()函数读取csv
问题描述:
我想映射到各省的数据城市。d3使用d3.map和d3队列()函数读取csv
这是我的示例csv数据。 (a.k.a'city.csv')
citycode,province,name
3704051,ProvinceA,city1
3704052,ProvinceA,city2
3704054,ProvinceA,city3
3704062,ProvinceA,city4
3704056,ProvinceA,city5
3704058,ProvinceA,city6
3704059,ProvinceA,city7
3704060,ProvinceB,city8
3704061,ProvinceB,city9
3704063,ProvinceB,city10
3702011,ProvinceC,city11
3702012,ProvinceC,city12
映射后,我想要得到所有省份的东西。 例如,如果我把值'省A',返回'3704051','3704052'..等等
首先,我必须读取这样的数据。
var popByProvinceName = d3.map()
queue()
.defer(d3.json, "municipalities.json")
.defer(d3.csv, "city.csv", function(d) {
d.citycode = +d.citycode;
popByProvinceName.set(d.province, + d.citycode);
}).await(ready);
function ready(error, data1) {
console.log(popByProvinceName.get("ProvinceA");
}
仅返回一个省份的城市代码。
3704059
我该如何解决?请帮忙!
答
您将覆盖每次迭代的值。您需要将它们推入阵列中:
queue()
//.defer(d3.json, "municipalities.json")
.defer(d3.csv, "city.csv", function(d) {
d.citycode = +d.citycode;
// first time we've seen province
if (!popByProvinceName.has(d.province)) {
popByProvinceName.set(d.province, []);
}
// get the array and add to it
popByProvinceName.get(d.province).push(d.citycode);
}).await(ready);
全部code。
的备用和比较清爽,干净的方式来做到这将是你的准备函数中使用d3.nest:
function ready(error, data1) {
var nest = d3.nest()
.key(function(d) { return d.province; })
.rollup(function(r){
return r.map(function(d){
return +d.citycode;
});
})
.entries(data1);
完全code。
太棒了!非常感谢! – DDanggle