函数从子对象计算父对象大小's大小
function to calculate the parent size from children's size
我正在做这样的事情,http://bl.ocks.org/mbostock/1283663但我希望父母的体型是孩子的平均体型。我找到了一个解决方案,但它只适用于最后一位家长。我的建议是实现一个新的函数平均
function average(d) {
if (d.children !=null){
return d3.sum(d.children, function(d) {return d.value;})/d.children.length;}
else{
return d.value;
}
}
然后我替换所有出现的
.attr("width", function(d) { return x(d.value); })
带有
.attr("width", function(d) { return x(average(d)); })
但它只计算最晚的父母和他们的孩子的平均值。你知道我如何纠正这个函数来计算所有父母的平均值吗?这是我第三次问这个问题,但请理解我,这对我来说很有趣,我知道如果有人帮助我,我会找到解决方案非常感谢
首先,您不需要发明一个新函数来为对象数组中的每个元素找到某个属性的平均值。您可以使用d3.mean
。
您可以使用递归函数为每个具有子节点的节点添加一个新属性,将其称为averageChildValue
。
例如,您可以这样做:
function recurse(node) {
// IF A NODE HAS CHILDREN...
if (node.children) {
// ADD A PROPERTY REPRESENTING THE AVG VALUE OF ITS CHILDREN
node.averageChildValue = d3.mean(node.children, function(d) {
return d.value;
});
// RECURSIVELY CALL THE FUNCTION ON THE CHILDREN
node.children.forEach(function(d) { recurse(d); });
}
}
d3.json("readme.json", function(error, root) {
// PARTITION THE DATA
partition.nodes(root);
// USE THE RECURSIVE FUNCTION TO CALCULATE THE AVERAGES
recurse(root)
// DO SOMETHING WITH YOUR NEW-AND-IMPROVED DATA
console.log(root)
});
检查控制台输出,每个具有子节点的节点现在都应该有一个名为averageChildValue
的额外属性。
相关文章:
- 更改屏幕上对象的宽度调整大小
- IndexedDB对象键:大小是否重要
- 以编程方式将fabric-js-canvas的图像替换为hq图像,并重新计算其他对象的坐标和大小
- 添加JQuery UI在Meteor中添加对象后可调整大小
- 通过 Websocket 发送的 JSON 对象的大小
- 是受(GWT)基类中方法数量影响的JavaScript对象的大小
- 如何测量Javascript对象的大小
- Firebase 对象大小:如何忽略带有 $ 的属性
- 放大/缩小时,在地图上保持 D3 对象大小不变
- JavaScript-对象大小
- jQuery调整对象大小
- Three.js WebGl调整对象大小的怪异行为
- AngularJS+d3js:调整对象大小的问题
- 函数从子对象计算父对象大小's大小
- 如何在jQuery UI's的可调整大小功能中传递aspectRatio选项来调整对象大小
- 通过调整对象大小来避免高度溢出
- 在Fabric.js中调整对象大小
- 无法向文件对象大小属性添加值
- Fabricjs:如何显示缩放后的对象大小
- 检查AngularJS模板中的对象大小,做错了