我想使用树形布局用d3.js创建一个图表。而不是具有分层儿童的普通耀斑json结构,如:
{
"name":"bla",
"children":[
{
"name":"bla2",
"someattribute":"green"
}
]
}
我只有一个数组(代表时间步长的元素)。我总是希望数组的下一个元素是当前的子(ren)元素。 所以实际上我想要一个用扁平数组生成的树。 我的想法是改变树形布局的子功能,如下所示:
var tree = d3.layout.tree()
.children(function(d,i) {
return data[(i+1)];
})
但树中只显示一个元素。我不明白。在tree.nodes
上调用data[0]
时,它不应该遍历每个元素吗?
澄清我的要求:我想将像[ele1, ele2, ele3]
这样的数组转换为如下所示的树形图:
ele1-->ele2-->ele3
答案 0 :(得分:1)
我看到的真正问题是传递给.children()
的函数需要返回一个子对象数组,而不是像现在这样返回一个对象,即。
var tree = d3.layout.tree()
.children(function(d,i) {
return i < data.length - 1; data.slice(i+1, i+2) : null;
})
叶节点(数组中的最后一个数据对象)返回null
而不是空列表也很重要。
使用这种方法,我创建了一个工作JSFiddle,它将从一个对象数组中创建一个线性树。
但是,我同意@ LarsKotthoff对你的帖子的评论;如果您以层次结构格式传递tree.nodes()
对象的根,那么您的代码将在可维护性和灵活性方面得到更好的服务。