[英]d3 read csv with d3.map and d3 queue() function
我想映射到每個省的數據城市。
這是我的示例csv數據。 (又稱“ 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
映射后,我想獲取所有省份信息。 例如,如果我輸入值'ProvinceA',則返回'3704051','3704052'..etc
首先,我必須讀取這樣的數據。
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);
完整代碼 。
另一種更簡潔的方法是在您的ready函數中使用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);
完整代碼 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.