我正在使用美国人口普查ACS API来提取美国所有县的数据。然后我想根据值生成一个县级的等值线图。如果我有一个静态数据文件(区号为CSV的CSV),我可以渲染数据。但是,来自API的数据又回来了:
0: "B08101_025E"
1: "NAME"
2: "state"
3: "county"
...
0: "42"
1: "Autauga County, Alabama"
2: "01"
3: "001"
数据似乎需要:value,以便上面看起来像(忽略标题元素):
01001: 42
我认为我对数据的格式化以及预期的输出应该是多少。最后,我正在做的是:
var pad = d3.format("05d"),
quantize = d3.scale.quantile().domain([0, 15]).range(d3.range(9));
d3.json("us-counties.json", function (json) {
counties.selectAll("path")
.data(json.features)
.enter().append("svg:path")
.attr("class", function (d) {
return "q" + quantize(dataSet[pad(d.id)]) + "-9";
})
.attr("d", path)
.on("click", click)
.append("svg:title")
.text(function (d) {
return d.properties.name + ": " + dataSet[pad(d.id)] + "%";
});
});
这取自here。请注意dataSet[pad(d.id)]
没有命中,因为数据不在我认为需要的键/值对中。如何以预期的格式获得这个?我试过让dataSet
成为二维数组:
0: "01001"
1: 42
这仍然没有达到预期的效果。
答案 0 :(得分:0)
嗯,看起来问这个问题会有所帮助。之后我又一次解决了这个问题并做了这个:
var dataObj = {};
d3.json(jsonRequest, function (data) {
$.each(data, function (key, val) {
if (key > 0) {
var apiValue = parseInt(val[0], 10);
var apiState = val[2];
var apiCounty = val[3];
//var elmentArray = [apiState + apiCounty, apiValue];
//dataSet.push(elmentArray);
dataObj[apiState + apiCounty] = apiValue;
}
});
...
return d.properties.name + ": " + dataObj[pad(d.id)] + "%";
现在唯一的问题是,当我更改数据源时,数据不会更新。
答案 1 :(得分:0)
R的acs package是另一种获取ACS数据的有用方法(通过API,但很友好)。
还有一个有用的,广泛的讨论,使用R(包括acs包)从Census数据创建彩色编码的地图,例如:
http://blog.revolutionanalytics.com/2009/11/choropleth-map-r-challenge.html
和
http://eglenn.scripts.mit.edu/citystate/tag/acs/
和