D3的力导向布局基础知识

Ale*_*lex 6 javascript physics-engine d3.js force-layout

我正在用d3.js进入激动人心的强制导向布局世界.我已经掌握了d3的基本原理,但我无法弄清楚建立力导向布局的基本系统.

现在,我正在尝试创建一个简单的布局,其中有几个未连接的气泡浮动到中心.很简单吧!?创建了正确的圆圈,但没有任何反应.

编辑:问题似乎是force.nodes()返回初始数据数组.在工作脚本上,force.nodes()返回一个对象数组.

这是我的代码:

<script>
  $(function(){

    var width = 600,
        height = 400;

    var data = [2,5,7,3,4,6,3,6];


    //create chart
    var chart = d3.select('body').append('svg')
        .attr('class','chart')
        .attr('width', width)
        .attr('height', height);

    //create force layout
    var force = d3.layout.force()
        .gravity(30)
        .alpha(.2)
        .size([width, height])
        .nodes(data)
        .links([])
        .charge(30)
        .start();

    //create visuals
    var circles = chart.selectAll('.circle')
        .data(force.nodes()) //what should I put here???
        .enter()
        .append('circle')
        .attr('class','circles')
        .attr('r', function(d) { return d; });

    //update locations
    force.on("tick", function(e) {
      circles.attr("cx", function(d) { return d.x; })
        .attr("cy", function(d) { return d.y; });
    });

  });


</script>
Run Code Online (Sandbox Code Playgroud)

Ale*_*lex 3

问题就在这里。您输入的数组force.nodes(array)必须是对象数组。

所以:

var data = [{number:1, value:20}, {number:2, value:30}...];

作品。或者甚至只是

var data=[{value:1},{value:2}];

使脚本正常工作。