我有一个CSV文件,其中有一列包含重复的名字(字符串)。我喜欢将所有的别名/重复的名字分组,计数/添加它们,并将它们的总数放在一个div中;即,分区基地1:20,分区基地2:80,第三分区基地:120.我尝试使用d3.js来实现这个想法,我得到了要出现在div中的名称,但不知道如何创建不同重复名称(字符串)的总Base计数并将其放置在提到的div中。使用D3是否可行?下面是我迄今为止的尝试。CSV列/数据如下所示:
d3.selectAll(".container").append("div")
.attr("id", function(d) { return "base" + d.id})
.html(function(d, i) {
if('Base' + d.id === 'Base' + d.id){
return data[i].location;
}
})
/////////My modification of your suggestion////////
var baseCount = d3.nest()
.key(function(d) { return d.value; })
.rollup(function(v) { return v.length; })
.entries(data);
console.log(baseCount);
// append divs
var mainDiv = d3.selectAll(".imgContainer");
mainDiv.selectAll(".imgContainer").data(baseCount).enter().append("div").attr("id", function(d) { return "bases" + d.id}).html(function (d) {
return d.values;
// return "<pre>" + d[0] + " : " + d[1] + "</pre>";
});
1条答案
按热度按时间t40tm48m1#
D3v6以上版本有一个
.rollups
数组转换,可以满足你的需要。如果你使用的是早期版本的D3,有一些等效的转换,或者你也可以编写普通的Javascript。rollups
方法可以创建一个基本id和它们的计数的"摘要",然后你可以将输出数组传递给一个数据连接来创建div。示例如下: