Javascript D3:嵌套并排除某些键
我是d3新手,尝试在一个框中绘制四个特定州的数据,类似于州,但不是大陆,还有更多的数据点。我有一个json数据集,其中有42000多个条目,据说仅来自这4个州 要按状态设置密钥,我使用了以下方法:Javascript D3:嵌套并排除某些键,javascript,json,d3.js,Javascript,Json,D3.js,我是d3新手,尝试在一个框中绘制四个特定州的数据,类似于州,但不是大陆,还有更多的数据点。我有一个json数据集,其中有42000多个条目,据说仅来自这4个州 要按状态设置密钥,我使用了以下方法: d3.json("data/business.json",function(json) { var data=d3.nest() .key(function(d) {return d.state;}) .sortKeys(d3.ascending) .entries
d3.json("data/business.json",function(json) {
var data=d3.nest()
.key(function(d) {return d.state;})
.sortKeys(d3.ascending)
.entries(json);
然后,为每个状态制作一个框:
// One cell for each state
var g=svg.selectAll("g").data(data).enter()
.append("g")
(属性等)
很好,但是我很快发现数据集包含了一些我不想考虑的数据,所以它绘制的盒子比我想要的要多。p>
我想要一种方法,在不改变原始数据文件的情况下,排除不来自四个州的数据。最好的办法是什么 过滤你的
json
:
var keep = ["state1", "state2", "state3", "state4"];
json = json.filter(function(d) { return keep.indexOf(d.state) > -1; });
可以过滤d3.nest而不是原始数组的输出:
function trim(nested, f) {
return nested
.filter(function (e) {
return f(e.key)
})
.map(function (e) {
if (e && (typeof e =='object') && Array.isArray(e.values) && ('key' in e)) {
return { key: e.key, values: trim(e.values, f)}
}
else return e
})
}
例如:
function isNewEngland(st) {
return ["ME","VT","NH","MA", "CT", "RI"].indexOf(st)>=0
}
data = trim(data, isNewEngland)
是的!你能告诉我为什么同一行不适用于json=json.filter(函数(d){return keep.contains(d.state);});这不是一个函数。这不是有效的JS吗?@punstress
array.contains()
不是有效的javascript。是一个相关的SO问题。如果不是方法,我不确定为什么会找到contains()/