2014-09-01 117 views
0

我正在做這樣的事情,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); }) 

所有occurence與

   .attr("width", function(d) { return x(average(d)); }) 

但它僅適用於最新的父母和他們的孩子計算平均。你有什麼想法我該如何糾正這個函數來計算所有父母的平均值? 這是我第三次問過這個問題,但請理解我,這對我來說非常有趣,我知道,我會找到解決辦法,如果有人可以幫助我 非常感謝

+0

撥弄你的數據,然後我們可以做一些事情...... – 2014-09-01 10:36:16

+0

但是不是d.value已經是孩子們的總和了嗎?所以你只需要返回d.value/d.children.length;或者你的數據是怎樣的? – nothing9 2014-09-01 11:05:08

+0

[函數來計算兒童的大小D3 js的平均值]的可能重複(http://stackoverflow.com/questions/25499957/function-to-calculate-the-averages-of-childrens-size-d3-js) – jshanley 2014-09-01 21:46:01

回答

0

首先,你不需要創造一個新的函數來找到對象數組中每個元素的某個屬性的平均值。你可以使用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額外的屬性。

+0

(「width」,function(d){return x(d.value);})with .attr(「width」,function(d){return x(recurse(d));}) ? – 2014-09-04 08:39:01

+0

不,我建議的方法會改變你的整個數據集,所以如果你想要寬度是孩子的平均大小的函數,你可以直接將寬度屬性基於該值,例如:'.attr('width ',函數(d){return x(d.averageChildValue);})' – jshanley 2014-09-04 19:21:02

+0

它不適用於我:(在控制檯中顯示:Valeur NaN inattendue lors de l'de de l'attribut width。 – 2014-09-06 22:02:00