因为项目需要,要求实现类似力导图效果的图,我就瞄上了echarts。

注意事项1:由于我的项目要部署到内网,所以js文件要在本地,网上大多力导图都是echarts2的,而其又依赖zrender基础库,下载的echarts2是2.2.7版本,但是去zrender官网下载的2.1版本,用起来说版本最低要求2.1.1,下载最新又提示缺少文件,引用网页js反而没事儿,于是只能选择echarts3了。

注意事项2:echarts2到echarts3有许多改动的地方,首先echarts3没有force了,而是把force归类在graph(关系图)下了,其次myChart.on()方法的事件简化了,也有其他方法改动等在此就不一一赘述了,文档介绍的很清楚。

注意事项3:因为我采用的是标签式单文件引入(<script src="路径/echarts.js></script>"),所以也不用require()方法去加载,echarts对象直接用就可以了。

注意事项4:echarts3的api网址:http://echarts.baidu.com/option.html#title,最常用的api在配置项手册中,了解了配置项手册的东西就能应付大部分应用了,而api选项是一些特殊的方法,也就是不常用的,以下是我啃了3天api的成果,我只把有关力导图的代码贴出来了,不知道能不能用,我几乎是把整个API都写在注释里了,希望对新人能有所帮助,在此附上效果图、html和js的代码,以供参考。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=8">
<!-- 使用IE8以上的渲染 -->
<!-- <meta name="renderer" content="webkit|ie-comp|ie-stand"> -->
<!-- 三个参数分别代表极速、兼容、标准模式,适用于360浏览器 -->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>监控管理系统</title>
<script type="text/javascript" charset="utf-8"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/include/jquery.min.js">
</script>
<script type="text/javascript" src="${pageContext.request.contextPath}/include/echarts.js">
</script>  <!--导入的为ECharts3的js --></head>
<body><div style="padding:20px;width:100%;height:100%;"> <!-- 为 ECharts 准备一个具备大小(宽高)的 DOM --><div id="main" style="width: 1104px;height:464px;"></div><div id='main_1' style="position: relative;height:15px;width: 100%;color:#A52A2A">节点关系提示区</div></div>
</body>
</html>

            // 基于准备好的dom,初始化ECharts实例            var myChart = echarts.init(document.getElementById('main'), 'macarons');            // 指定图表的配置项和数据var option = {tooltip : {show : true,   //默认显示showContent:true, //是否显示提示框浮层trigger:'item',//触发类型,默认数据项触发triggerOn:'click',//提示触发条件,mousemove鼠标移至触发,还有click点击触发alwaysShowContent:false, //默认离开提示框区域隐藏,true为一直显示showDelay:0,//浮层显示的延迟,单位为 ms,默认没有延迟,也不建议设置。在 triggerOn 为 'mousemove' 时有效。hideDelay:200,//浮层隐藏的延迟,单位为 ms,在 alwaysShowContent 为 true 的时候无效。enterable:false,//鼠标是否可进入提示框浮层中,默认为false,如需详情内交互,如添加链接,按钮,可设置为 true。position:'right',//提示框浮层的位置,默认不设置时位置会跟随鼠标的位置。只在 trigger 为'item'的时候有效。confine:false,//是否将 tooltip 框限制在图表的区域内。外层的 dom 被设置为 'overflow: hidden',或者移动端窄屏,导致 tooltip 超出外界被截断时,此配置比较有用。transitionDuration:0.4,//提示框浮层的移动动画过渡时间,单位是 s,设置为 0 的时候会紧跟着鼠标移动。formatter: function (params, ticket, callback) {//判断数据,提供相应的url。var path="";var node=params.data; //当前选中节点数据var category=params.data.category;  //选中节点图例0负载 1中间件 2端口号 3数据库 4用户名 if(category==2){ //为jvm 虚拟机各类参数的路径path = "${ctx}/weblogic.do?host=" + node.host + "&port="+ node.port + "&username=" + node.username+ "&pwd=" + node.pwd; //准备访问路径}else if(category==4){ //为jdbc 数据库的路径path = "${ctx}/oracle.do?host=" + node.host + "&port="+ node.port + "&username=" + node.username+ "&pwd=" + node.pwd + "&instance="+ node.instance; //准备访问路径
                        }console.log(params);$.ajax({async : true,//设置异、同步加载cache : false,//false就不会从浏览器缓存中加载请求信息了type : 'post',dataType : "json",url : path,//请求的action路径  success : function(data) { //请求成功后处理函数。    //加工返回后的数据debugger;if(category==2){ //当选择端口号时var res = 'jvm最大内存值:' + data.memoryMaxSize+'<br/>';res+='jvm空闲内存值:'+data.memoryFreeSize+'<br/>';res+='jvm内存使用率:'+data.memoryPer+'<br/>';res+='空闲线程:'+data.ideThread+'<br/>';res+='总线程:'+data.totalThread+'<br/>';res+='每秒处理的线程数比率:'+data.throuhput+'<br/>';callback(ticket,res);}else if(category==4){//当选择用户名时var res = '当前链接数:'+data.processCount+'<br/>';res+='最大链接数:'+data.maxProcessCount+'<br/>';callback(ticket,res);}},error : function() {//请求失败处理函数  $.messager.alert('警告', '请求失败!', 'warning');}});if(category==2||category==4){ //当选择端口号与用户名时提示加载return "loading";}else{                   //其他情况显示所属图例以及名称return myChart.getOption().series[params.seriesIndex].categories[params.data.category].name+":"+params.name;}}},legend : { //=========圖表控件show : true,data : [ {name : '负载',icon : 'rect'//'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow'
            },{name : '中间件',icon : 'roundRect'}, {name : '端口号',icon : 'circle'}, {name : '数据库',icon : 'circle'},{name : '用户名',icon : 'roundRect'} ]},series : [ {type : 'graph', //关系图name : "监控管理系统", //系列名称,用于tooltip的显示,legend 的图例筛选,在 setOption 更新数据和配置项时用于指定对应的系列。layout : 'force', //图的布局,类型为力导图,'circular' 采用环形布局,见示例 Les MiserableslegendHoverLink : true,//是否启用图例 hover(悬停) 时的联动高亮。hoverAnimation : true,//是否开启鼠标悬停节点的显示动画coordinateSystem : null,//坐标系可选xAxisIndex : 0, //x轴坐标 有多种坐标系轴坐标选项yAxisIndex : 0, //y轴坐标 force : { //力引导图基本配置//initLayout: ,//力引导的初始化布局,默认使用xy轴的标点repulsion : 100,//节点之间的斥力因子。支持数组表达斥力范围,值越大斥力越大。gravity : 0.03,//节点受到的向中心的引力因子。该值越大节点越往中心点靠拢。edgeLength :80,//边的两个节点之间的距离,这个距离也会受 repulsion。[10, 50] 。值越小则长度越长layoutAnimation : true//因为力引导布局会在多次迭代后才会稳定,这个参数决定是否显示布局的迭代动画,在浏览器端节点数据较多(>100)的时候不建议关闭,布局过程会造成浏览器假死。
                    },roam : true,//是否开启鼠标缩放和平移漫游。默认不开启。如果只想要开启缩放或者平移,可以设置成 'scale' 或者 'move'。设置成 true 为都开启nodeScaleRatio : 0.6,//鼠标漫游缩放时节点的相应缩放比例,当设为0时节点不随着鼠标的缩放而缩放draggable : true,//节点是否可拖拽,只在使用力引导布局的时候有用。focusNodeAdjacency : true,//是否在鼠标移到节点上的时候突出显示节点以及节点的边和邻接节点。//symbol:'roundRect',//关系图节点标记的图形。ECharts 提供的标记类型包括 'circle'(圆形), 'rect'(矩形), 'roundRect'(圆角矩形), 'triangle'(三角形), 'diamond'(菱形), 'pin'(大头针), 'arrow'(箭头)  也可以通过 'image://url' 设置为图片,其中 url 为图片的链接。'path:// 这种方式可以任意改变颜色并且抗锯齿//symbolSize:10 ,//也可以用数组分开表示宽和高,例如 [20, 10] 如果需要每个数据的图形大小不一样,可以设置为如下格式的回调函数:(value: Array|number, params: Object) => number|Array//symbolRotate:,//关系图节点标记的旋转角度。注意在 markLine 中当 symbol 为 'arrow' 时会忽略 symbolRotate 强制设置为切线的角度。//symbolOffset:[0,0],//关系图节点标记相对于原本位置的偏移。[0, '50%']edgeSymbol : [ 'none', 'none' ],//边两端的标记类型,可以是一个数组分别指定两端,也可以是单个统一指定。默认不显示标记,常见的可以设置为箭头,如下:edgeSymbol: ['circle', 'arrow']edgeSymbolSize : 10,//边两端的标记大小,可以是一个数组分别指定两端,也可以是单个统一指定。itemStyle : {//===============图形样式,有 normal 和 emphasis 两个状态。normal 是图形在默认状态下的样式;emphasis 是图形在高亮状态下的样式,比如在鼠标悬浮或者图例联动高亮时。normal : { //默认样式
                            label : {show : true},borderType : 'solid', //图形描边类型,默认为实线,支持 'solid'(实线), 'dashed'(虚线), 'dotted'(点线)。borderColor : 'rgba(255,215,0,0.4)', //设置图形边框为淡金色,透明度为0.4borderWidth : 2, //图形的描边线宽。为 0 时无描边。opacity : 1// 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。默认0.5
},emphasis : {//高亮状态
}},lineStyle : { //==========关系边的公用线条样式。
                        normal : {color : 'rgba(255,0,255,0.4)',width : '3',type : 'dotted', //线的类型 'solid'(实线)'dashed'(虚线)'dotted'(点线)curveness : 0.3, //线条的曲线程度,从0到1opacity : 1// 图形透明度。支持从 0 到 1 的数字,为 0 时不绘制该图形。默认0.5
                        },emphasis : {//高亮状态
}},label : { //=============图形上的文本标签
                        normal : {show : true,//是否显示标签。position : 'inside',//标签的位置。['50%', '50%'] [x,y]textStyle : { //标签的字体样式color : '#cde6c7', //字体颜色fontStyle : 'normal',//文字字体的风格 'normal'标准 'italic'斜体 'oblique' 倾斜fontWeight : 'bolder',//'normal'标准'bold'粗的'bolder'更粗的'lighter'更细的或100 | 200 | 300 | 400...fontFamily : 'sans-serif', //文字的字体系列fontSize : 12, //字体大小
                            }},emphasis : {//高亮状态
}},edgeLabel : {//==============线条的边缘标签
                        normal : {show : false},emphasis : {//高亮状态
}},//别名为nodes   name:影响图形标签显示,value:影响选中后值得显示,category:所在类目的index,symbol:类目节点标记图形,symbolSize:10图形大小//label:标签样式。
                    data : [ {id : 0,category : 0,name : '101.133.8.88',symbol : 'roundRect',value : 20,symbolSize : 80}, {id : 1,category : 1,name : '192.168.8.88',symbol : 'rect',value : 20,symbolSize : 70}, {id : 2,category : 2,name : '7001',symbol : 'circle',value : 20,symbolSize : 60,yId:"jvm",host:"192.168.6.37",port:"7001",username:"weblogic",pwd:"weblogic1"}, {id : 3,category : 2,name : '7100',symbol : 'circle',value : 20,symbolSize : 60}, {id : 4,category : 1,name : '102.12.33.23',symbol : 'rect',value : 20,symbolSize : 70}, {id : 5,category : 2,name : '7001',symbol : 'circle',value : 20,symbolSize : 60}, {id : 6,category : 2,name : '7100',symbol : 'circle',value : 20,symbolSize : 60}, {id : 7,category : 2,name : '7001',symbol : 'circle',value : 20,symbolSize : 60}, {id : 8,category : 1,name : '101.11.66.6',symbol : 'rect',value : 20,symbolSize : 70}, {id : 9,category : 2,name : '7101',symbol : 'circle',value : 20,symbolSize : 60}, {id : 10,category : 2,name : '7101',symbol : 'circle',value : 20,symbolSize : 60}, {id : 11,category : 2,name : '7001',symbol : 'circle',value : 20,symbolSize : 60}, {id : 12,category : 2,name : '7100',symbol : 'circle',value : 20,symbolSize : 60}, {id : 13,category : 3,name : '192.168.44.44',symbol : 'circle',value : 20,symbolSize : 70}, {id : 14,category : 3,name : '192.168.33.33',symbol : 'circle',value : 20,symbolSize : 70}, {id : 15,category : 3,name : '192.168.22.22',symbol : 'circle',value : 20,symbolSize : 70}, {id : 16,category : 4,name : '55555555555',symbol : 'circle',value : 20,symbolSize : 70,yId:"jdbc",port:"1521",host:"192.168.11.11",username:"222222222",pwd:"11111111",instance:"orcl"}],categories : [ //symbol name:用于和 legend 对应以及格式化 tooltip 的内容。 label有效
                    {name : '负载',symbol : 'rect',label : { //标签样式
                        }}, {name : '中间件',symbol : 'rect'}, {name : '端口号',symbol : 'roundRect'}, {name : '数据库',symbol : 'roundRect'}, {name : '用户名',symbol : 'roundRect'} ],links : [ //edges是其别名代表节点间的关系数据。
                    {source : 1,target : 0}, {source : 4,target : 0}, {source : 8,target : 0}, {source : 2,target : 1}, {source : 3,target : 1}, {source : 5,target : 4}, {source : 6,target : 4}, {source : 7,target : 4}, {source : 9,target : 8}, {source : 10,target : 8}, {source : 11,target : 8}, {source : 12,target : 8}, {source : 13,target : 6}, {source : 14,target : 6}, {source : 15,target : 2}, {source : 16,target : 15} ]} ]};// 使用刚指定的配置项和数据显示图表。
            myChart.setOption(option);/*ECharts3 方法部分 开始*/function appendPath(params){    //拼接节点关系并显示在左下角,var option = myChart.getOption();var series = option.series[params.seriesIndex]; //获取图表var nodesOption = series.data;//获取所有数据var links= series.links;//获取所有连线if(params.dataType=="node"){ //dataType可以是edge(线条)或node(数据)var id=params.data.id;var categoryName = series.categories[params.data.category].name;//获取当前节点的图例名称var str=categoryName+":"+nodesOption[id].name;var i = 0;var map = {};for( i = 0 ; i < links.length; i++){map[links[i].source] = links[i].target;}while(true){           if(map[id] == undefined){break;}//获取父节点的图例名称并连接str =series.categories[nodesOption[map[id]].category].name+":"+nodesOption[map[id]].name+"->" + str; id = map[id] ;}return str;}else if(params.dataType=="edge"){ //当鼠标停留在连线上时,暂不处理return "";}}function openOrFold(params) {  //该事件会提示节点间关系var str = appendPath(params);document.getElementById("main_1").innerHTML = str;return str;}//var ecConfig = echarts.config; echarts2的获取事件方法,当前为echarts3myChart.on('mouseover', openOrFold);//'click'、'dblclick'、'mousedown'、'mousemove'、'mouseup'、'mouseover'、'mouseout' /*ECharts3 方法部分 结束*//*ECharts3 结束*/

转载于:https://www.cnblogs.com/koala2016/p/6123003.html

Echarts3 关系图-力导向布局图相关推荐

  1. echarts关系图/力导向动态图(地图经纬度定位)

    需求:项目要做一个动态展示服务器前置机间是否连通的界面. 先看下效果,分两种,一种带地图(经纬度),一种屏蔽地图显示: 这个是通过百度echarts的一个案列改造而来.下面附上官网地址.API地址.改 ...

  2. ECharts力导向布局图增加滚动条

    ECharts(canvas)根据容器(div)初始化宽度,高度 <!-- 为ECharts准备一个具备大小(宽高)的DOM--> <div id="capital&quo ...

  3. echart关系树状图_Echarts关系图-力引导布局

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

  4. Echarts3可伸展力导向图

    Echarts3可伸展力导向图   最近知识图谱项目的需要,使用Echarts3开发了可伸展力导向图前端代码,现分享如下:   主要功能:图谱web端可视化:支持用户交互. <!DOCTYPE ...

  5. 仿企查查、天眼查 d3关联关系图 力项导图

    研究完股权穿透图跟企业图谱 最近又写了一个企业.人物的力项导图 力导向图可以直观看出各个元素之间的关系 具体的代码就不贴了,官网很多 demo 都可以直接拿来用 先看效果 d3灵活的地方就在于它可以 ...

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

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

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

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

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

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

  9. H5 --力导向图、关系图谱

    //copy劝言:多研究没有坏处,随copy可直接使用,但建议研究一下: 操作节点,添加自己想要的效果: 例如:不要 颜色原点,更换图片: 点击效果:隐藏显示,是否显示连线,连线颜色是否统一: < ...

最新文章

  1. 放心,GPT-3不会“杀死”编程
  2. golang中的runtime
  3. 判断大小简单算法_优化 | 贪婪算法有多好?Submodularity告诉你
  4. 经典C语言程序100例之十二
  5. centos yum安装python2.7及常见报错处理
  6. Dapr微服务应用开发系列2:Hello World与SDK初接触
  7. LayerDrawable层叠样式layer
  8. 【Shiro第六篇】SpringBoot + Shiro集成缓存功能
  9. Git 工具之TortoiseGit小乌龟安装配置及使用
  10. win10 软路由_N合1服务器!NAS、软路由、高清盒子、Web一个都不能少!
  11. Openbravo ERP介绍
  12. 图的分支生成:对稀疏的无向图,在度数不等于2的节点处,将图“拆散”,输出各条分支,分别用深度优先搜索和广度优先搜索实现。
  13. PACS系统源码 影像管理系统源码(PACS)
  14. 且看三星刚发布的Smart TV如何窃听你的枕边细语 - 硅谷路透社
  15. 快速上手Ubuntu之安装常用软件篇——打造一个满足基本娱乐办公的Ubuntu
  16. 一个“精神病”人的世界观——我看完了,然后陷入深深的不安中……
  17. omap3630 linux i2c总线驱动分析,OMAP3630 Linux I2C总线驱动分析
  18. 你即将拥有HDMI2.1,纯光纤HDMI最高支持72Gbps试用体验
  19. android service是什么,Android service是什么 Android service详解
  20. 机器人关节模组的总结归纳

热门文章

  1. 直接下载txt文件而不是打开它
  2. 人工智能算法:卷1基础算法+卷2受大自然启发的算法+卷3深度学习和神经网络电子书
  3. 长城汽车室外AGV无线应用方案
  4. 计算机毕业设计(附源码)python游戏盒子系统
  5. 一张画布重塑你的职业生涯
  6. Vue项目引入自定义字体
  7. 榆熙电商:拼多多品牌专卖店和旗舰店区别在哪?
  8. 最新全开源的个人主页源码/原创拟态UI3.0版
  9. 实体标注工具 BRAT(brat rapid annotation tool)
  10. freeRTOS自学入门教程速成版