将计数除以总体以在crossfilter dc.js中创建入射图

时间:2015-04-09 11:59:28

标签: javascript dc.js crossfilter

我正在创建一张带有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 ;
    })
    ;

0 个答案:

没有答案