【发布时间】:2013-11-27 15:16:46
【问题描述】:
D3 是否提供了创建树的可能性,其中在同一级别的节点之间存在连接,但也提供独立于不同级别的级别的路径(例如,级别 2 的节点 3 应该具有到节点 6 的可视链接4 级)。
我的意思是这样的:
(1)
(2)_/ \_(3)
/_(4) \
/_(5)__(6)
我认为这是一个“正常”的图形结构,但我必须像树一样自上而下地将其可视化。 也许http://bl.ocks.org/GerHobbelt/3683278 将是一个很好的起点,但我怎样才能让 force-layout 像树一样更清晰地可视化节点?
编辑: 我的数据如下所示:
{
"name": "Root",
"children": [
{
"name": "1",
"children": [
{
"name": "2",
"children": [
{"name": "20"},
{"name": "21"},
{"name": "22"}
]
},
{
"name": "3",
"children": [
{"name": "31",
"children": [
{"name": "300"},
{"name": "301"},
{"name": "302",
"children": [
{"name": "3020"},
{"name": "3021"},
{"name": "3022"}
]
}
]
},
{"name": "32"},
{"name": "33"},
{"name": "34"}
]
},
{
"name": "4",
"children": [
{"name": "41"},
{"name": "41"}
]
}
]
}
]
}
我复制了这样的树示例:http://bl.ocks.org/mbostock/4339083
我现在如何添加单个链接?例如在节点 '2' 和 '3' 之间? 我加了
var dataset = {
edges: [
{source: 2, target: 3}
]
};
在复制的示例中,链接创建是通过
// Update the links…
var link = vis.selectAll("path.link")
.data(tree.links(nodes), function(d) { return d.target.id; });
// Enter any new links at the parent's previous position.
link.enter().insert("svg:path", "g")
.attr("class", "link")
.attr("d", function(d) {
var o = {x: source.x0, y: source.y0};
return diagonal({source: o, target: o});
})
.transition()
.duration(duration)
.attr("d", diagonal);
// Transition links to their new position.
link.transition()
.duration(duration)
.attr("d", diagonal);
// Transition exiting nodes to the parent's new position.
link.exit().transition()
.duration(duration)
.attr("d", function(d) {
var o = {x: source.x, y: source.y};
return diagonal({source: o, target: o});
})
.remove();
我不明白,如何添加新的附加链接。有什么想法吗?
【问题讨论】:
标签: javascript graph d3.js tree