Jam*_*s B 9 javascript svg dendrogram d3.js
我对d3.js(以及一般的SVG)很新,我想做一些简单的事情:带有角度连接器的树/树形图.
我从这里蚕食了d3的例子:http ://mbostock.github.com/d3/ex/cluster.html我想让它更像这里的protovis示例:
我在这里开始:http://jsbin.com/ugacud/2/edit#javascript,html,我认为这是以下代码片段的错误:
var diagonal = d3.svg.diagonal()
.projection(function(d) { return [d.y, d.x]; });
Run Code Online (Sandbox Code Playgroud)
然而,没有明显的替代品,我可以使用d3.svg.line,但我不知道如何正确地集成它,理想情况下我想要一个弯头连接器....虽然我想知道我是否使用了错误的库,因为我见过的很多d3例子都是用引力来制作物体图而不是树.
mbo*_*ock 26
diagonal使用SVG的"H"和"V" 路径命令将功能替换为自定义路径生成器.
function elbow(d, i) {
return "M" + d.source.y + "," + d.source.x
+ "V" + d.target.x + "H" + d.target.y;
}
Run Code Online (Sandbox Code Playgroud)
请注意,交换源和目标的坐标(x和y).此示例显示具有水平方向的布局,但布局始终使用相同的坐标系:x是树的宽度,y是树的深度.因此,如果要在右边缘显示带有叶子(最下面)节点的树,则需要交换x和y.这就是对角线的投影功能所做的,但在上面的弯头实现中,我只是对行为进行了硬编码,而不是使用可配置的函数.
如:
svg.selectAll("path.link")
.data(cluster.links(nodes))
.enter().append("path")
.attr("class", "link")
.attr("d", elbow);
Run Code Online (Sandbox Code Playgroud)
一个工作的例子: