在使用d3js的条形图项目中,我已经到达了一个死胡同。我试着用tsv文件中的数据来找出不同国家无人机数量的总和。由于电子表格中的多个条目来自同一个国家,所以我想添加这些值。
所以,当我在.attr('y')下运行一次代码时,它就成功了。我仔细检查了电子表格和加起来的金额。但是,当我在.attr('height')中运行相同的条件时,我得到了一些不稳定的值,这些值扰乱了条形图。下面是我遇到麻烦的代码:
g.selectAll(".bar")
.data(data)
.enter().append("rect")
.attr("class", "bar")
.attr("x", function(d) { return x(d.Country); })
.attr("y", function(d,i) {
try{
if (data[i].Country == data[i-1].Country){
data[i].Registration += data[i-1].Registration;
}
else{
console.log(data[i-1].Country + ' ' + data[i-1].Registration);
return data[i-1].Registration;//y(data[i-1].Registration);
}
}
catch(err){
console.log('did not work')
}
})
.attr("width",20)
.attr("height", function(d,i) {
try{ //SAME CODE DIFFERENT REGISTRATION VALUES
if (data[i].Country == data[i-1].Country){
data[i].Registration += data[i-1].Registration;
}
else{ console.log(data[i-1].Country + ' ' + data[i-1].Registration); return (height - data[i-1].Registration);}
}
catch(err){
console.log('did not work')
}
});
})tsv文件如下所示:
Country Registration
land Islands 1
American Samoa 1
American Samoa 1
American Samoa 1
American Samoa 6
American Samoa 1
American Samoa 1
American Samoa 1
Antigua and Barbuda 1
Argentina 1
Australia 1
Australia 2
Australia 1
Australia 1
Brazil 1
Brazil 1
Brazil 1我已经把整段代码放在js小提琴上了。我真的很感激帮助,因为我已经花了超过一天的压力解决方案。
发布于 2016-12-17 09:34:16
你需要总结一下你的价值观:
因此,如果你的数据有多个“美属萨摩亚”,那么你需要总结所有的无人机,总计12架。
为此,可以使用d3 nest对其注册进行分组和汇总。
var data_sum = d3.nest()
.key(function(d) { return d.Country; })//group by country
.rollup(function(v) { return d3.sum(v, function(d) { return d.Registration; }); })//roll up all resgistrations
.entries(data);现在,这将给您总结数据,这些数据可以用来制作条形图,就像这个示例一样。
工作代码这里
https://stackoverflow.com/questions/41196660
复制相似问题