d3.js中的图形方向和节点定位

时间:2012-08-10 20:52:54

标签: javascript svg graph d3.js force-layout

感谢早期question,我使用d3.js中的强制布局制作了一个静态固定布局图:

enter image description here

我有两个具体问题需要进一步自定义布局:

首先,我注意到确定性地初始化节点位置(例如,在这里对角完成,详细信息请参见script)修复了节点的位置,节点的方向似乎依赖于此初始化以及力图的尺寸*。我想知道如何在水平对齐上方的图表中创建节点A, D, E, F, I?换句话说,我想逆时针转动图形的方向大约45度。我试图在中间水平初始化节点:

nodes.forEach(function(d, i) { d.x = w / size * i; d.y = h / 2; });

但是生成的输出将所有节点和边缘水平地放在它们初始化的位置。

第二,力图是否自动在svg元素中居中?如果不是,我们怎么能这样做呢?如果是,我们如何在svg元素中指定力图的中心?

(*注意:奇怪的是,当设置.size([w, h])其中w = h为力图时,并确定性地沿对角线初始化节点时,所有节点和边沿输出中的对角线定位,为什么呢?)

1 个答案:

答案 0 :(得分:2)

尝试在每个刻度上添加自定义重力,将节点拉向水平线。像这样:

force.on('tick', function(e) {
  nodes.forEach(function(d) {
    d.y += (height/2 - d.y) * e.alpha;
  });
})

对于你的第二个问题,我相信,它没有居中,但默认情况下会有一个小的重力将节点拉向中心。