我正在通过编写基础的力导向图来学习d3.我的代码在下面.我不明白的是force.on('tick' ... 的目的
当然,如果我们使用内置类进行布局,我会认为给你的节点和链接提供d3.layout.force()就足够了,它应该能够以平衡的布局绘制图形.
如果我注释掉force.on部分('tick' ......那么我的所有圆圈和线条都会在左上角结束.内部发生的事情和svg容器中发生的事情之间是否存在差异因此我们需要force.on('tick'重绘布局以匹配每次当前的内部值集合?
var nodes = [
{},
{},
{}
];
var links = [
{'source': 0, 'target': 1}
];
// append svg element to container
var mychart = d3.select('#chart')
.append('svg')
.attr('width', w)
.attr('height', h);
// create force layout in memory
var force = d3.layout.force()
.nodes(nodes)
.links(links)
.size([w, h]);
// append a group for each data element
var node = mychart.selectAll('circle')
.data(nodes).enter()
.append('g')
.call(force.drag);
// append circle onto each 'g' node
node.append('circle')
.attr('fill', palette.green)
.attr('r', circleWidth);
/*force.on('tick', function(e) {
node.attr('transform', function(d, i) {
return 'translate('+ d.x +', '+ d.y +')';
})
link
.attr('x1', function(d) { return d.source.x })
.attr('y1', function(d) { return d.source.y })
.attr('x2', function(d) { return d.target.x })
.attr('y2', function(d) { return d.target.y })
});*/
var link = mychart.selectAll('line')
.data(links).enter()
.append('line')
.attr('stroke', palette.gray)
force.start();
Run Code Online (Sandbox Code Playgroud)