D3.js嵌套函数,无法将数据放入层次结构

时间:2018-12-08 19:37:32

标签: javascript json d3.js

所以我正在尝试创建d3.js树。我的数据必须先采用分层形式,然后才能传递到d3.treeLayout。

此刻,我的json数组是什么样子

var data = [
      {"group":"1","price":"36599.88", "cy":"44260"},
      {"group":"2","price":"36599.88", "cy":"44260"},
      {"group":"3","price":"36599.88", "cy":"44260"},
      {"group":"4","price":"36599.88", "cy":"44260"},
      {"group":"1","price":"1241.88", "cy":"44260"},
      {"group":"2","price":"36595429.88", "cy":"44260"},
      {"group":"3","price":"12124.88", "cy":"44260"},
      {"group":"4","price":"6264.88", "cy":"44260"},
    ]

然后我使用d3.nest()函数,该函数必须对条目进行分组

var NestedBudget = d3.nest()
                    .key(function(d){
                        return d.group;
                    })
                    .entries(data);

但是,当我进一步将其传递给d3.hierarchy()时,此数据不起作用。 enter image description here

我将收到的结果的图片附加到var root_data = d3.hierarchy(data);

我希望我不要混淆任何人。任何帮助将不胜感激

2 个答案:

答案 0 :(得分:1)

请记住,您想拥有一棵。一棵树需要有一个根元素,每个节点都需要两件事:一个唯一的ID,以及一个链接到其父ID的字段。

例如,使用您拥有的数据,通过添加一个id字段并假设“ group”代表父节点,您可以将平面数据转换为分层数据:

var data = [
      {"id":"0", "group":null, "price":"36599.88", "cy":"44260"},
      {"id":"1", "group":"0", "price":"36599.88", "cy":"44260"},
      {"id":"2", "group":"0","price":"36599.88", "cy":"44260"},
      {"id":"3", "group":"0","price":"36599.88", "cy":"44260"},
      {"id":"4", "group":"0","price":"36599.88", "cy":"44260"},
      {"id":"5", "group":"1","price":"1241.88", "cy":"44260"},
      {"id":"6", "group":"2","price":"36595429.88", "cy":"44260"},
      {"id":"7", "group":"3","price":"12124.88", "cy":"44260"},
      {"id":"8", "group":"4","price":"6264.88", "cy":"44260"},
    ];
    
const tree = d3
      .stratify()
      .id(d => d.id)
      .parentId(d => d.group)(data);
      
console.log(tree);
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>

请注意,带有"group":null的节点是根节点(根据定义,根节点是树的起始节点,因此它没有任何父节点)。

答案 1 :(得分:0)

好的,所以皮埃尔·卡波(Pierre Capo)所说的是正确的。我添加了var packableData = {id:"parent", values:data};

我接收到的数据,当您将其传递给d3.hierarchy()时,它将在层次结构中设置