本文主要结合案例记录使用D3.js绘制力布图的基本方法

样例显示

基本配置

      this.force = d3.layout
.force()
.size([this.width, this.height])
.linkDistance(function(d) {
return 100;
})
.linkStrength(0.2)
.friction(0.5)
.charge(-1500);
  • d3.layout.force() :构造一个新的力导向布局

  • size([width,height]) :布局图的大小

  • linkStrength:连接线的连接强度

  • linkDistance([distance]) :连接线的连接距离,默认20,可以是数值或函数

  • friction:摩擦系数,可以使刚开始进入的速度衰减

  • charge : 节点间的电荷强度,默认-30,负值表示排斥,正值表示吸引,该参数决定是排斥还是吸引,数值越小越互相排斥

事件绑定

// 事件绑定
this.force
.on("tick", that.tick)
.drag()
.on("dragstart", function(d, e, o) {
// 拖动前事件
......
})
.on("drag", function(d, e, o) {
// 拖动中事件
......
})
.on("dragend", function(d, e, o) {
// 拖动后事件
......
});
  • tick:初始化及迭代过程中行为操作,监听节拍事件来更新节点和链接的显示位置

  • drag:绑定一个行为允许交互式拖动

绘制SVG

     // 绘制SVG
let svg = d3
.select(".model-svg-force")
.append("svg")
.attr("class", "svg-container")
.attr("width", this.width)
.attr("height", this.height)
.on("click", function(d) {
// 点击事件绑定
......
});

d3 允许类似jquery的链式操作,可以筛选出元素,赋值属性等

  • select:选择dom元素

  • append:插入dom元素

  • attr:属性赋值

  • on:事件绑定

缩放

   // zoom的设置
let zoom = d3.behavior.zoom().scaleExtent([0.5, 2]).on("zoom", zoomed); // 缩放的时候,将面板也同步缩放
zoomed(e) {
d3.selectAll(".g-wrapper").attr(
"transform",
"translate(" + d3.event.translate + ")scale(" + d3.event.scale + ")"
);
} // 应用zoom
d3.call(zoom)
  • d3.behavior.zoom():构造一个新的缩放行为,构造之后,可以使用call()将此行为应用于选择器;
  • d3.scaleExtent([]):指定缩放比例的允许范围
  • d3.event.scale:一个数值,当前的比例
  • d3.event.translate:一个数组,代表平移向量
  • on(type,listener):支持的事件类型有zoomstart(缩放开始)/zoom(缩放行为发生时)/zoomend(缩放行为结束时)

启动

  // 启动
this.force
.nodes(nodes)
.links(links)
.start();
  • nodes([nodes]):节点的信息:

    • x - 当前节点的x
    • y - 当前节点的y
    • px - 前一个节点的位置x
    • py - 前一个节点的位置y
    • fixed - 节点是否被锁定
    • weight - 节点权重
  • links([links]):连接线的信息:

    • source - 源节点
    • target - 目标节点
  • start():启动模拟;当首次创建布局时此方法必须被调用,然后分配节点和链接

其他方法

  • resume():重新启动定时器,在拖拽的时候会自动调用
  • transition():动画效果
  • duration(time):动画时间

更多内容请查看D3中文手册

D3力布图绘制--基本方法的更多相关文章

  1. D3力布图绘制--节点自己连自己的实现

    案例分析 先看下实现的效果图 实现方法 本篇是在之前写的博文 D3力布图绘制--节点间的多条关系连接线的方法 基础上加修改的,这里放上修改的代码,其他的一样 // DATA var nodes = [ ...

  2. D3力布图绘制--节点跑掉,单曲线弯曲问题记录

    D3力布图绘制中遇到的交互问题,频繁操作数据后,会出现节点跑掉和单曲线弯曲的问题 问题描述 在id指向都正常的情况下出现以下2种状况: 单曲线弯曲 节点跑掉 经排查,是数据重复导致的问题 线条也是一样 ...

  3. D3力布图绘制--节点间的多条关系连接线的方法(转)

    在项目中遇到这样的场景,在使用D3.js绘制力布图的过程中,需要在2个节点间绘制多条连接线,找到一个不错的算法,在此分享下. 效果图: HTML中要连接 <!DOCTYPE html> & ...

  4. D3力布图绘制--在曲线路径上添加文本标记

    今天遇到一个在曲线路径上标识文本标记的问题,找到一个比较好的解决思路,在这里分享下: 使用d3建立的Force Layout,加上自定义的箭头形状,将多条连接线线改成弧线(https://www.cn ...

  5. d3力导图绘制节点间多条关系平行线的方法

    之前用d3做了多条线之间的绘图是曲线表示的,现在产品要求改成平行线的样式,经过在网上的调研和自己的尝试,实践出一个可用的方法,分享给大家,先展示下结果: 事先声明,本方法是在以下参考网站上进行的结合和 ...

  6. d3力导向图聚焦

    效果描述 双击节点,节点以及节点一度关联的节点保持高亮状态,其余节点变灰,半径变小,文字消失,并且向内收缩. 效果展示 正常状态 聚焦效果 关键代码 节点变化 激活节点保持高亮的样式,其余节点应用no ...

  7. Vue和d3.js(v4)力导向图force结合使用,v3版本升级v4【一】

    前段时间因为参与项目涉密,所以一直没有更新博客,有些博友给我私信或者留言要部分博文的源码,因为我的电脑更换,demo的源码没有备份 所以无法提供.大家可针对具体问题问我,有空我定会回复的.另外转发文章 ...

  8. D3.js 力导向图

    花了大半天看了一个八十几行的代码..心累 力导向图是之前就有画过很多次的东西,但是这次的代码看上去很陌生,然后发现是D3更新了4.0.... 先贴代码 var svg = d3.select(&quo ...

  9. D3.js 力导向图的制作

    力导向图中每一个节点都受到力的作用而运动,这种是一种非常绚丽的图表. 力导向图(Force-Directed Graph),是绘图的一种算法.在二维或三维空间里配置节点,节点之间用线连接,称为连线. ...

随机推荐

  1. 《细说PHP》第四版 样章 第二章 PHP的应用与发展 2

    2.2  PHP的应用 任何一种主流的编程语言,几乎都可以开发任何类型的软件.编程语言就是一种开发工具,而选择适合的工具去做适合的事儿,才能体现其应用价值.PHP最主要的应用,就是与数据库交互来开发W ...

  2. SpringMVC日期类型接收空值异常问题

    最近遇到SpringMVC写个controller类,传一个空串的字符类型过来,正常情况是会自动转成date类型的,因为数据表对应类类型就是date的 解决方法是在controller类的后面加个注解 ...

  3. pytest框架与unittest框架的对比

    一.pytest的优势 pytest是基于unittest之上的单元测试框架,它的优势如下: 自动发现测试模块和测试方法 断言使用 assert + 表达式 可以设置测试会话级(session).模块 ...

  4. 愉快地使用Groovy Shell

    这是一篇有关Groovy Shell的帖子,以及它如何在日常工作中为您提供帮助(只要您是软件开发人员).无论您使用哪种编程语言或技术,都可以从Groovy Shell中受益.唯一真正的要求是您能够编写 ...

  5. Oracle - 如何查找指定字符串所出现的表

    需求:举个例子,oracle测试库的scott用户下面的有张emp表,emp表的ename列中有一行数据为'CLARK'.红色标记部分. SQL> select * from scott.emp ...

  6. java.lang.NoClassDefFoundError: org/apache/commons/collections/FastHashMap报错解决

    在使用 commons-beanutils-1.9.2.jarcommons-logging-1.1.1.jar 的时候报错 java.lang.NoClassDefFoundError: org/a ...

  7. JavaWeb之Fliter & Listener

    Fliter & Listener Listener 监听器 作用 监听某一事件的发生.状态的改变. 监听器内部实现机制 接口回调 接口回调 A在执行循环,当循环到5的时候, 通知B. 事先先 ...

  8. FCC---Use CSS Animation to Change the Hover State of a Button---鼠标移过,背景色变色,用0.5s的动画制作

    You can use CSS @keyframes to change the color of a button in its hover state. Here's an example of ...

  9. iOS开发时获取第一响应者

    上篇中提到键盘相应时间中用到了获取当前第一响应者的方法是苹果的是有方法,无法上传到App Store,本文将介绍一种非常简单的且未用到私有API的方法来获取当前第一响应者. 实现思路:用到的iOS A ...

  10. swift(五)swift的函数

    /** * 函数的定义和调用 */ func showIntegerArray(array:[Int]) { for a in array { println("\(a)") } ...