D3力布图绘制--基本方法
本文主要结合案例记录使用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力布图绘制--基本方法的更多相关文章
- D3力布图绘制--节点自己连自己的实现
案例分析 先看下实现的效果图 实现方法 本篇是在之前写的博文 D3力布图绘制--节点间的多条关系连接线的方法 基础上加修改的,这里放上修改的代码,其他的一样 // DATA var nodes = [ ...
- D3力布图绘制--节点跑掉,单曲线弯曲问题记录
D3力布图绘制中遇到的交互问题,频繁操作数据后,会出现节点跑掉和单曲线弯曲的问题 问题描述 在id指向都正常的情况下出现以下2种状况: 单曲线弯曲 节点跑掉 经排查,是数据重复导致的问题 线条也是一样 ...
- D3力布图绘制--节点间的多条关系连接线的方法(转)
在项目中遇到这样的场景,在使用D3.js绘制力布图的过程中,需要在2个节点间绘制多条连接线,找到一个不错的算法,在此分享下. 效果图: HTML中要连接 <!DOCTYPE html> & ...
- D3力布图绘制--在曲线路径上添加文本标记
今天遇到一个在曲线路径上标识文本标记的问题,找到一个比较好的解决思路,在这里分享下: 使用d3建立的Force Layout,加上自定义的箭头形状,将多条连接线线改成弧线(https://www.cn ...
- d3力导图绘制节点间多条关系平行线的方法
之前用d3做了多条线之间的绘图是曲线表示的,现在产品要求改成平行线的样式,经过在网上的调研和自己的尝试,实践出一个可用的方法,分享给大家,先展示下结果: 事先声明,本方法是在以下参考网站上进行的结合和 ...
- d3力导向图聚焦
效果描述 双击节点,节点以及节点一度关联的节点保持高亮状态,其余节点变灰,半径变小,文字消失,并且向内收缩. 效果展示 正常状态 聚焦效果 关键代码 节点变化 激活节点保持高亮的样式,其余节点应用no ...
- Vue和d3.js(v4)力导向图force结合使用,v3版本升级v4【一】
前段时间因为参与项目涉密,所以一直没有更新博客,有些博友给我私信或者留言要部分博文的源码,因为我的电脑更换,demo的源码没有备份 所以无法提供.大家可针对具体问题问我,有空我定会回复的.另外转发文章 ...
- D3.js 力导向图
花了大半天看了一个八十几行的代码..心累 力导向图是之前就有画过很多次的东西,但是这次的代码看上去很陌生,然后发现是D3更新了4.0.... 先贴代码 var svg = d3.select(&quo ...
- D3.js 力导向图的制作
力导向图中每一个节点都受到力的作用而运动,这种是一种非常绚丽的图表. 力导向图(Force-Directed Graph),是绘图的一种算法.在二维或三维空间里配置节点,节点之间用线连接,称为连线. ...
随机推荐
- Apollo的基本概念和集成实战
基本概念 使用场景 是一个分布式的配置中心.适用于微服务: 核心功能 集中管理不同环境,不同集群的配置: 配置修改后可以实时推送到应用端: 具备规范的权限,流程治理特性: 开发技术 服务端使用spri ...
- WebJar的打包和使用
前言 WebJar官网:https://www.webjars.org/,对于任何与Servlet 3兼容的容器,WEB-INF/lib目录中的webjar都会自动作为静态资源提供.这是因为WEB-I ...
- JQuery学习笔记(1)——选择器
JQuery本质上还是JavaScript,是JavaScript的一个框架,可以让我们更简洁地去使用JavaScript 使用之前,记得在html头部引用JQuery 通过选择器获得JQuery对象 ...
- C#将Excel数据表导入SQL数据库的两种方法
最近用写个winform程序想用excel 文件导入数据库中,网上寻求办法,找到了这个经过尝试可以使用. 方法一: 实现在c#中可高效的将excel数据导入到sqlserver数据库中,很多人通过循环 ...
- 诚聘.NET架构师、高级开发工程师(2019年8月29日发布)
招聘单位是ABP架构设计交流群(134710707)群主阳铭所在的公司 公司简介 七二四科技有限公司成立于2015年,成立之初便由金茂资本按估值2亿投资2200万,进行“健康724”平台搭建,2017 ...
- DataGridView怎样实现添加、删除、上移、下移一行
场景 在Winform中使用DataGridView实现添加一行.删除一行.上移一行.下移一行. 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi ...
- 移动端适配方案(rem+flex)
为什么用rem不用px? 主流:各大网站的移动版绝大多数都是用的rem. 移动端屏幕分辨率差别太大:最低适配的iPhone6,分辨率仅为750*1334.而现在市面上大多数手机,都达到了1080* ...
- springboot服务的一些问题
一: springboot踩坑记--springboot正常启动但访问404; 1. spring boot的启动类不能直接放在main(src.java.main)这个包下面,把它放在有包的里面就可 ...
- uni-app聊天室|vue+uniapp仿微信聊天实例|uniapp仿微信App界面
一.介绍 运用UniApp+Vue+Vuex+swiper+uniPop等技术开发的仿微信原生App聊天室|仿微信聊天界面实例项目uniapp-chatroom,实现了发送图文消息.表情(gif图), ...
- SQL Server阻塞的检查
1. 阻塞 除了内存.CPU.I/O这些系统资源以外,阻塞和死锁是影响数据库应用性能的另一大因素. 所谓的「阻塞」,是指当一个数据库会话中的事务,正在锁定其他会话事务想要读取或修改的资源,造成这些 ...