与DC.js Choropleth地图的Crossfilter

时间:2016-04-26 13:55:17

标签: d3.js dc.js crossfilter

单独使用D3,我能够得到我想要的结果,但是使用DC.js我遇到了一些问题,我的猜测是因为我缺乏使用Crossfilter的知识。

我的CSV数据如下:

ccgcode,ccgname,metric,male,female
06M,Great Yarmouth And Waveney,3,50,70
05G,North Staffordshire,3,40,60
... etc

我的javascript如下:

'use strict'

var numberFormat = d3.format(".2f");
var ccgMap       = dc.geoChoroplethChart('.map-wrap');
// var sexPieChart  = dc.pieChart('.pie-chart');

d3.csv('../data/metricdata.csv', function (data) {
    var data = crossfilter(data);

    var ccgs = data.dimension(function (d) {
        return d['ccgcode'];
    });

    var ccgMetric = ccgs.group();

    d3.json("../data/ccg.json", function (map) {
        ccgMap.width(800)
            .height(800)
            .dimension(ccgs)
            .group(ccgMetric)
            .colors(d3.scale.quantize().range(["#7cbd30", "#0066cc", "#ee2e11"]))
            .colorDomain([0, 200])
            .colorCalculator(function (d) { return d ? ccgMap.colors()(d) : '#ccc'; })
            .overlayGeoJson(topojson.feature(map, map.objects.ccg).features, "CCGcode", function (d) {
                return d.properties.CCGcode;
            });

        dc.renderAll();
    });
});

大部分代码都是from here。所以我知道以后当我着色时会遇到一些问题..但是现在我甚至无法显示地图!

我只是得到一个空白页面!我可以看到SVG被绘制到页面上,但它没有路径信息!

enter image description here

我做错了什么?我在Crossfilter中看到的所有示例都有非常精细的粒度数据,这很好,但是在我的情况下,DBA已经将粒度数据分组到CCG代码组中,该怎么做。

如果您一直在问为什么要使用Crossfilter,那是因为我希望稍后(通过创建性别维度)使用它来驱动一个特定的CCG(只是一个区域)的女性/男性饼图点击地图。

1 个答案:

答案 0 :(得分:1)

好的我已经有地图显示了,这就是我做的:

  1. 显然dc.geoChoroplethChart()仅适用于GeoJSON,而不是TopoJSON,这就是我所拥有的。我使用this tool转换回来。
  2. 使代码.projection()使用(like here),默认为d3.geo.albersUsa(),对英国不起作用(对我来说没有用)< / LI>

    非常感谢this thread中的Xavier