我试图嵌套我的JSON数据,这样我就可以轻松地制作出一棵d3树。我有这样的代码:D3嵌套 - 级数不一致
d3.json("dbdata/getdata", function(error, data) {
var nestedData = {
"key":"root",
"values":
d3.nest()
.key(function(d){return d.category1})
.key(function(d){return d.category2})
.key(function(d){return d.category3})
.key(function(d){return d.category4})
.entries(data) }
我遇到的问题是,不是所有的在我的数据项都已经分配给它们的所有四个类别。其中一些只有category1和category2,所以在这种情况下,我希望在该链接上只有两个节点(在树形图上)。但是,这里发生的是,即使没有分配所有类别,所有链接都会获得四级结构。如果我有一个只有两个类别(category1和category2)的集合,我在正确的地方获得category1,类别2在最后得到,并且在它们之间创建两个级别的空数据。
有没有一种方法可以在嵌套过程中指定要忽略的内容(在我的数据集中,空分类被分配为“0”)? 我已经试过这样的事情:
.key(function(d){if(d.category2 !=="0")return d.category3})
但它只是改变了“0”到“不确定”,不改变结构。
或者也许有一种方法来更改D3代码,所以我会忽略这些空的级别?我是新来的D3和我的代码是完全根据这个例子:http://mbostock.github.io/d3/talk/20111018/tree.html
编辑:
由于数据结构看起来像这样:
elements = [
{name: 'johny',
category1: 'cat1',
category2: 'cat2a'
},
{name: 'cindy',
category1: 'cat1',
category2: 'cat2b',
category3: 'cat3'
}];
我想D3树看像这样:
cat2a - johny
/
cat1
\
cat2b - cat3 - cindy
而且目前我得到这样的:
cat2a - undefined - johny
/
cat1
\
cat2b - cat3 - cindy
谢谢你的回应,不幸的是,这不是我所追求的。我编辑了我的帖子,所以现在可能会更清楚一些。 – Xnn04
当然,编辑我的答案更好地适合你的情况。让我知道如果这有帮助,如果没有,我会尝试把一个jsfiddle进一步编辑。 –
所以我试图实现你的代码,但遇到了一些问题。问题是存储在使用此函数创建的数组中的两个许多组(如果您愿意,则使用节点/链接集)。同样的父母/孩子群体在那里倍增。在这个特殊的例子中,我可以通过调用d3函数来解决这个问题:d3MakeMeAtree(root.children [0] .children [0]),但这并不是最佳解决方案,但我无法弄清楚如何改变你的函数使其正常工作。 – Xnn04