d3 中带弯头连接器的树/树状图



我对d3.js(以及一般的SVG)很陌生,我想做一些简单的事情:带有角度连接器的树/树状图。

我已经从这里蚕食了d3示例:http://mbostock.github.com/d3/ex/cluster.html我想让它更像这里的原型示例:

  • http://mbostock.github.com/protovis/ex/indent.html
  • http://mbostock.github.com/protovis/ex/dendrogram.html

我从这里开始:http://jsbin.com/ugacud/2/edit#javascript,html,我认为以下片段是错误的:

var diagonal = d3.svg.diagonal()
.projection(function(d) { return [d.y, d.x]; });

但是没有明显的替代品,我可以使用d3.svg.line,但我不知道如何正确集成它,理想情况下我想要一个弯头连接器......虽然我想知道我是否为此使用了错误的库,因为我看到的许多 d3 示例都是使用引力来绘制物体而不是树木的图。

使用 SVG 的 "H" 和 "V" 路径命令将 diagonal 函数替换为自定义路径生成器。

function elbow(d, i) {
  return "M" + d.source.y + "," + d.source.x
      + "V" + d.target.x + "H" + d.target.y;
}

请注意,源和目标的坐标(xy)是交换的。本示例以水平方向显示布局,但布局始终使用相同的坐标系:x 是树的宽度,y 是树的深度。因此,如果要在右边缘显示叶(最底部)节点的树,则需要交换 xy。这就是对角线投影函数的作用,但在上面的肘部实现中,我只是对行为进行了硬编码,而不是使用可配置的函数。

如:

svg.selectAll("path.link")
    .data(cluster.links(nodes))
  .enter().append("path")
    .attr("class", "link")
    .attr("d", elbow);

还有一个工作示例:

  • http://bl.ocks.org/d/2429963/

相关内容

  • 没有找到相关文章

最新更新