d3.layout.force()---入门篇

分为组织数据和绘图两部分:

原地址:http://www.ourd3js.com/wordpress/196/

1. 数据

初始数据如下:

节点(nodes)和连线(edges)的数组,节点是一些城市名,连线的两端是节点的序号(序号从 0 开始)。

这些数据是不能作图的,因为不知道节点和连线的坐标。这句话一说出来,就请想到布局。本章用到的布局是:d3.layout.force()

2. 布局(数据转换)

定义一个力导向图的布局如下。

然后,使力学作用生效:

如此,数组 nodes 和 edges 的数据都发生了变化。在控制台输出一下,看看发生了什么变化。

节点转换前后如下图。

921

转换后,节点对象里多了一些变量。其意义如下:

  • index:节点的索引号
  • px, py:节点上一个时刻的坐标
  • x, y:节点的当前坐标
  • weight:节点的权重

再来看看连线的变化。

923

 

可以看到,连线的两个节点序号,分别变成了对应的节点对象。

3. 绘制

有了转换后的数据,就可以作图了。分别绘制三种图形元素:

  • line,线段,表示连线。
  • circle,圆,表示节点。
  • text,文字,描述节点。

代码如下:

调用 call( force.drag ) 后节点可被拖动。force.drag() 是一个函数,将其作为 call() 的参数,相当于将当前选择的元素传到 force.drag() 函数中。

最后,还有一段最重要的代码。由于力导向图是不断运动的,每一时刻都在发生更新,因此,必须不断更新节点和连线的位置。

力导向图布局 force 有一个事件 tick,每进行到一个时刻,都要调用它,更新的内容就写在它的监听器里就好。

tick 的英文意思是钟表发出的嘀嗒嘀嗒声,想到这个大家应该很清楚了吧。每次触发时,都会调用后面的无名函数 function。

来看看最终效果图,用鼠标拖拽看看:

附件见:http://download.csdn.net/download/sdxushuxun/10194458  文件force2-1.html
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值