我正在创建一张带有dc.js的地图,以显示每个省的一些疾病。
我设法使用此维度和组创建了总count
的地图:
,provinceDimension = ndx.dimension(function(d) { return d.province; })
,provinceGroup = provinceDimension.group()
其中d.province的定义如下:
switch (d.NUTS2) {
case 10: d.province = "Brussels"; break;
case 21: d.province = "Antwerp"; break;
case 22: d.province = "Limburg"; break;
case 23: d.province = "East Flanders"; break;
case 24: d.province = "Flemish Brabant"; break;
case 25: d.province = "West Flanders"; break;
case 31: d.province = "Walloon Brabant"; break;
case 32: d.province = "Hainaut"; break;
case 33: d.province = "Liege"; break;
case 34: d.province = "Luxembourg"; break;
case 35: d.province = "Namur"; break;
default: d.province = "UNK";
};
如何创建维度和组以显示发生率(=count *100000 /population
)而不是count
?
我认为我需要修改组并使用reduce函数来实现这一目标,但我对组的理解目前非常有限。
这是我迄今为止没有运气的尝试
,provinceGroup = provinceDimension.group().reduce(reduceAddIncidence('province'), reduceRemoveIncidence('province'), reduceInitIncidence)
function reduceAddIncidence(attr) {
return function(p,v) {
++p.count
switch (v['province']) {
case "Brussels": p.incidence = p.count*100000/1111; break;
case "Antwerp": p.incidence = p.count*100000/2222; break;
case "Limburg": p.incidence = p.count*100000/3333; break;
case "East Flanders": p.incidence = p.count*100000/4444; break;
case "Flemish Brabant": p.incidence = p.count*100000/5555; break;
case "West Flanders": p.incidence = p.count*100000/6666; break;
case "Walloon Brabant": p.incidence = p.count*100000/7777; break;
case "Hainaut": p.incidence = p.count*100000/8888; break;
case "Liege": p.incidence = p.count*100000/9999; break;
case "Luxembourg": p.incidence = p.count*100000/1010; break;
case "Namur": p.incidence = p.count*100000/1111; break;
case "UNK": p.incidence = p.count*100000/1212; break;
};
return p;
};
}
function reduceRemoveIncidence(attr) {
return function(p,v) {
--p.count
switch (v['province']) {
case "Brussels": p.incidence = p.count*100000/1111; break;
case "Antwerp": p.incidence = p.count*100000/2222; break;
case "Limburg": p.incidence = p.count*100000/3333; break;
case "East Flanders": p.incidence = p.count*100000/4444; break;
case "Flemish Brabant": p.incidence = p.count*100000/5555; break;
case "West Flanders": p.incidence = p.count*100000/6666; break;
case "Walloon Brabant": p.incidence = p.count*100000/7777; break;
case "Hainaut": p.incidence = p.count*100000/8888; break;
case "Liege": p.incidence = p.count*100000/9999; break;
case "Luxembourg": p.incidence = p.count*100000/1010; break;
case "Namur": p.incidence = p.count*100000/1111; break;
case "UNK": p.incidence = p.count*100000/1212; break;
};
return p;
};
}
function reduceInitIncidence() {
return {count:0, sums:0, incidence:0};
}
1111,2222,3333,4444 ......代表这里的人口
非常感谢!
------ ------ EDIT
这是我使用的地图代码
mapChart
.width(width3)
.height(height3)
.dimension(provinceDimension) // set crossfilter dimension, dimension key should match the name retrieved in geo json layer
.group(provinceGroup) // set crossfilter group
.transitionDuration(200)
.projection(d3.geo.mercator()
.translate([width3/2,height3/2])
.center([-1.481, 0.01])
.scale(3500*width3)
)
.overlayGeoJson(geojson.features, 'province', function(d) {
return d.properties.name;
})
.colors(d3.scale.quantize().range(["#FFE1CC","#FFD5B7","#FFC9A3","#FFBD8E","#FFB17A","#FFA566","#FF9951","#FF8D3D","#FF8128","#FF7514","#FF6900"]))
.title(function(d) {
return d.key + ' : ' + d.value ;
})
;