所以我正在尝试创建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()时,此数据不起作用。
我将收到的结果的图片附加到var root_data = d3.hierarchy(data);
我希望我不要混淆任何人。任何帮助将不胜感激
答案 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()时,它将在层次结构中设置