统计d3.js中的数据项
Counting data items in d3.js
我有一些数据。它看起来像这样(但是数组中有几百个对象,而不是三个):
var data = [
{
id: "1",
name: "Name1",
color: "Color1"
},
{
id: "2",
name: "Name2",
color: "Color2"
},
{
id: "1",
name: "Name3",
color: "Color3"
}
我要做的是画一个矩形,它的高度对应于数据中具有特定id
值的项数。因此,例如,如果数据数组中有300个项目,id
为"1",则矩形将是300像素高。
显然我可以遍历数组并计算它们,但我想知道d3.js中是否有更简单/更短的方法。
我想到的可能是这样的:
svg.selectAll('rect').data(data).enter()
.append('rect')
.attr('x', 800)
.attr('y', 800)
.attr('height', //SOME CODE HERE)
.attr('width', 5)
.attr('fill', 'red')
您需要做两件事:
1)将您的Id分组以获得计数
2)将count值设置为d3
rect的高度属性
下面的代码将通过索引对id进行分组。groupId
的长度将是数据中常见id
的计数:
var groupId = [];
var maxId = 0;
for (var i = 0; i < data.length; i++){
var item = data[i];
if (!groupId[item.id]){
groupId[item.id] = [];
}
groupId[item.id].push({name: item.name, color:item.color});
if (maxId < item.id){
maxId = item.id;
}
}
然后是d3
//Make an SVG Container
var svgContainer = d3.select("body").append("svg").attr("width", 200).attr("height", 200);
for (var i = 1; i <= maxId; i++){
console.log("length of groupId is " + groupId[i].length);
console.log("Id is " + i);
for (var j = 0; j < groupId[i].length; j++){
console.log("name is " + groupId[i][j].name + " color is " + groupId[i][j].color);
}
console.log("===========================");
//Draw the Rectangle
var rectangle = svgContainer
.append("rect")
.attr("x", i*10)
.attr("y", i)
.attr("width", 5)
.attr("height", groupId[i].length);
}
检查控制台日志,将帮助您更好地理解数组。
演示JSFiddle相关文章:
- 可以't让我的if语句处理js中的html表单输入
- 使用agility.js进行页面布局和合成
- 使用Clipboard.js复制span文本
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 强制模板刷新ember.js
- 如何编写HTML输入的JS内联
- Angular JS IE9 Hashbang url rewriting
- 使用JS将数组转换为json对象
- Node.js v6.2.0类扩展不是函数错误
- 当js函数's已执行
- 要求未定义JS回调参数
- 在自定义mean.io包中使用angular-chart.js作为依赖项
- 无法在数据endVal中设置值=“”;{{ucount}}”;使用Angular JS的CountUp
- 如何从Java/scala调用js美化程序
- 如何更改<svg>标记为<img>用js标记
- 如何使用 node.js 比较两个 json 数组
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- D3.js如何只创建一个绑定到多个数据项的数据集的元素
- 统计d3.js中的数据项