带有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();
});
});
大部分代码,我从这里得到。 所以我知道我以后会遇到一些问题,当我着色..等等,但现在我甚至无法得到地图显示!
我只是得到一个空白页! 我可以看到SVG正在绘制到页面上,但它没有路径信息!
我究竟做错了什么? 我在Crossfilter中看到的所有示例都有非常好的细粒度数据,这很好,但是在我的情况下,DBA已经将粒度数据分组到CCG代码组中。
如果你问为什么要打扰Crossfilter,那是因为我想稍后使用它(通过创建一个性别维度)来驱动一个女性/男性的饼图,当点击一个特定的CCG(只是一个地图区域)时。
好的,我已经得到了地图显示,这是我所做的:
dc.geoChoroplethChart()
只能用于GeoJSON
,而不是TopoJSON
,这是我的。 我使用这个工具转换回来。 .projection()
使用(就像这里),因为默认是d3.geo.albersUsa()
,它不适用于英国(不适用于我) 非常感谢Xavier
在这个线程。