背景:项目 vue.js + d3 v4

力导向图可以直观看出各个元素之间的相互作用力

数据:

{nodes:[{id:xxx, group: xx},{},...]    //  nodes 是每个节点 group 是聚类后的分组 为了让每个 circle 显示不同分组的颜色links:[{target:xxx, source:xxx, value:xx },...] // links 为连线 value 可以代表 line 的 stroke-width
}复制代码

具体的代码就不贴了,官网很多 demo 都可以直接拿来用

效果如下:

在这里介绍几个点..

1.有的时候我们需要让他们之间分隔的间隔大一点,需要修改的地方:

var simulation = d3.forceSimulation().force("link", d3.forceLink().id(function(d) {return d.id;})).force("charge", d3.forceManyBody().strength(-200).distanceMax(100)) // strength 默认 -30.force("center", d3.forceCenter(width / 2, height / 2));
复制代码

2.当我们鼠标移到某个点的时候,想让与之相连的 circle fill + line stroke 高亮显示:

这里注意一下 鼠标移出的时候 样式恢复到之前的样式

ps:我们的link数据有一些重复的,所以要考虑到 target 和 source 相反的情况

.on("mouseover", function(d, i, o) {let currentd = d.idvar connectedNodeIds = graph.links.filter(x => x.source.id == d.id || x.target.id == d.id).map(x => x.source.id == d.id ? x.target.id : x.source.id)d3.select(".nodes").selectAll("circle").attr("fill", function(c) {if (connectedNodeIds.indexOf(c.id) > -1 || c.id == d.id) return "red";else return '#e49433'})d3.select(".links").selectAll("line").style("stroke", function(d,c) {if ((d.target.id === currentd && connectedNodeIds.indexOf(d.source.id) > -1) || (d.source.id === currentd && connectedNodeIds.indexOf(d.target.id) > -1)) {return 'red'} else {return '#999'}})}).on("mouseout", function(d) {d3.select(".nodes").selectAll("circle").attr("fill", "#e49433");d3.select(".links").selectAll("line").style("stroke", '#999')})
复制代码

参考链接

参考链接2

mouseover参考链接

d3 力导向图 force graph相关推荐

  1. 数据可视化—D3力导向图—如何实现结点与其连线的交互

    文章目录 前言 1.编写目的 2.编码工具 一.如何实现 1. 结点交互连线变粗 2. 文本自动换行 3. 背景图片设置透明度 二.实现效果 三.完整代码 1.用到的数据: 2.实现代码: 总结 前言 ...

  2. d3力导向图增加节点_d3.js力导向图节点如何都显示在边框内

    最近用到d3.js中的force力导向图,想实现效果如下,所有城市节点都在可视范围内,如果超出有滚动条也可以. 遇到的问题是,当节点一多,有的节点就会跑到外面去,这边是通过加大charge相互作用力, ...

  3. d3力导向图增加节点_D3.js+Es6+webpack构建人物关系图(力导向图),动态更新数据,点击增加节点,拖拽增加连线......

    Java学习手记2--多线程 一.线程的概念 CPU执行程序,就好比一个人在干事情一样,同一个时间你只能做一件事情,但是这样的效率实在是太低了,在你用电脑的时候,听歌就不能浏览网页,看电影就不能下载视 ...

  4. D3.js实现力导向图(Dray和Zoom)

    今天遇到个问题就是把json(里面nodes和edges属性)文件通过D3.js展示出来,下午终于弄出来了,写篇博客记录一下. 先展示一下效果图: 放大后是这个效果: 什么是力导向图 D3.js官网: ...

  5. d3.js力导向图使用详解

    创建一个力导向图需要三个东西: 仿真模拟系统 节点 力 当然,一般我们也会创建links(边)来连接两个节点,例如上图 仿真模拟系统中存在多个节点和多种类型的力,通过力控制节点的运动,每个节点都在多个 ...

  6. python力导向图论文_力导向图(关系图) echarts的运用

    Echarts关系图-力引导布局 需要做一个树形图,可以查看各个人员的关系. 可伸缩的力引导图-失败 刚开始,打算做一个可展开和伸缩的,搜索时候发现CSDN有一篇美美哒程序媛写的Echarts For ...

  7. D3.js系列——布局:饼状图和力导向图

    一.饼状图 在布局的应用中,最简单的就是饼状图. 1.数据 有如下数据,需要可视化: var dataset = [ 30 , 10 , 43 , 55 , 13 ]; 这样的值是不能直接绘图的.例如 ...

  8. 利用D3.js快速绘制力导向图

    碎碎念: 最近课题需要基于图论和力导向图可视化每个脑电通道之间的连接性,MATLAB画的效果差强人意,于是上网搜寻到JavaScript 的一个函数库--D3.js,想快速得到数据的可视化结果 简介D ...

  9. d3 svg path添加文本_D3.js 力导向图的显示优化

    D3.js 作为一个前端,说到可视化除了听过 D3.js 的大名,常见的可视化库还有 ECharts.Chart.js,这两个库功能也很强大,但是有一个共同特点是封装层次高,留给开发者可设计和控制的部 ...

最新文章

  1. win10英雄联盟登录服务器未响应,win10系统英雄联盟登陆不上的解决方法
  2. adb logcat 查看日志
  3. Puppet Master安裝手冊(CentOS 7)
  4. protobuf android ndk,直接在Android NDK端使用tensorflow(不使用JAVA api)
  5. java8新日期时间类使用
  6. 凭几句话的方案,你什么也做不了
  7. 20170216--PYthon 类 +面向对象编程+(文件的处理+echo小程序的实现)
  8. python学习手册笔记
  9. 酉矩阵和次酉矩阵的定义
  10. DNS用的是TCP协议还是UDP协议
  11. 淘宝 喵铺脚本自动签到脚本
  12. RocketMQ Message相关命令【实战笔记】
  13. 接入层、汇聚层、核心层交换机三者之间的功能详解
  14. k8s资源限制——资源的配额管理(Resource Quotas)
  15. 【个人网站】个人网站搭建全过程
  16. react+redux实战——redux到底是个啥子?
  17. 新零售之后,阿里巴巴又提出一个影响未来的概念
  18. Pulsar Summit Asia 2022 议题征集令,倒计时十天提交演讲议题
  19. 图像处理 OpenCV简介
  20. python 判断并记录1000以内素数的个数及具体数值

热门文章

  1. springboot使用定时器及发送邮件
  2. 如何查看tomcat是否安装成功_如何查看网站是否被收录?
  3. mysql怎么实现事务序列化_MySQL 架构 - 事务处理
  4. c语言fread读取错误,【求助】C语言fread读取二进制文件时,读取结果全都是零
  5. 网络运维之计算机端口
  6. android调用c闪退未看到log,解决:Android开发 看不到崩溃的日志
  7. 全国计算机在线做题,2020全国一级计算机基础及MS Office应用考试在线自测试题库(不限设备,登陆即可做题)...
  8. python量化交易策略实例_Python进阶量化交易场外篇3——最大回撤评价策略风险...
  9. IIS7.5 安全配置研究(推荐)
  10. linux 常见服务端口