使用echarts实现网络设备关系图,可追加数据

我们通过echarts框架实现网络设备关系图。
1.首先我们先去官网下载echarts的源码
echarts源码:https://github.com/apache/incubator-echarts/tree/4.6.0/dist(需要fork到自己的github上面才可以下载)
我fork了,你可以用我的去下载:https://github.com/zhonghuazhen/incubator-echarts
同时它官网上提供定制服务,你可以挑选自己想要的功能,然后再下载。https://www.echartsjs.com/zh/builder.html

然后导入到项目中去,引用jquery-3.3.1.min.js和echarts.min.js。

<script src="js/jquery-3.3.1.min.js"></script>
<script src="incubator-echarts-4.6.0/dist/echarts.min.js"></script>

然后echarts的社区那里下载一个好看点的样式,样例地址:https://gallery.echartsjs.com/editor.html?c=x08gNxOWCS

在body区定义一个div,并设置好大小,如果不设置大小的话,关系图会不显示。

<div id="OdfMes" style="width: 1800px;height: 800px;float: right"></div>

PS:id可以自己随便取,下面会用到这个id

然后我们就开始操作了:
在js的开头设置两个全局数组,分别装数据和连接关系,这样使用追加的时候,我们就可以通过push把数据和连接关系存入到数组中。
···
var datas=[];
var linkmes=[];//连接的信息
···
然后先把数据存进去,下面的数据都是使用上面的那个样例的数据:

    datas.push({
            name: '校园大数据',

            symbolSize: 120,
            draggable: true,
            category: 0,
            itemStyle: {
                normal: {
                    borderColor: '#04f2a7',
                    borderWidth: 6,
                    shadowBlur: 20,
                    shadowColor: '#04f2a7',
                    color: '#001c43',
                }
            }
        },
        {
            name: '舆情大数据',
            symbolSize: 100,
            itemStyle: {
                normal: {
                    borderColor: '#04f2a7',
                    borderWidth: 4,
                    shadowBlur: 10,
                    shadowColor: '#04f2a7',
                    color: '#001c43',
                }
            },
            category: 1,

        },
        {
            name: '用户分析',
            symbolSize: 80,
            category: 1,
            itemStyle: {
                normal: {
                    borderColor: '#04f2a7',
                    borderWidth: 4,
                    shadowBlur: 10,
                    shadowColor: '#04f2a7',
                    color: '#001c43',
                }
            },

        },
        {
            name: '话题分析',
            symbolSize: 80,
            category: 1,
            itemStyle: {
                normal: {
                    borderColor: '#82dffe',
                    borderWidth: 4,
                    shadowBlur: 10,
                    shadowColor: '#04f2a7',
                    color: '#001c43',
                }
            },

        },
        {
            name: '评论分析',
            symbolSize: 80,
            category: 1,
            itemStyle: {
                normal: {
                    borderColor: '#82dffe',
                    borderWidth: 4,
                    shadowBlur: 10,
                    shadowColor: '#04f2a7',
                    color: '#001c43',
                }
            },

        },
        {
            name: '图书馆分析',
            symbolSize:100,
            category: 2,
            itemStyle: {
                normal: {
                    borderColor: '#82dffe',
                    borderWidth: 4,
                    shadowBlur: 10,
                    shadowColor: '#04f2a7',
                    color: '#001c43',
                }
            },

        },
        {
            name: '借阅分析',
            symbolSize:80,
            category: 2,
            itemStyle: {
                normal: {
                    borderColor: '#b457ff',
                    borderWidth: 4,
                    shadowBlur: 10,
                    shadowColor: '#b457ff',
                    color: '#001c43'
                }
            },

        },
        {
            name: '借阅排行',
            symbolSize:80,
            itemStyle: {
                normal: {
                    borderColor: '#82dffe',
                    borderWidth: 4,
                    shadowBlur: 10,
                    shadowColor: '#04f2a7',
                    color: '#001c43'

                }
            },
            category: 2,

        },
        {
            name: '图书收录',
            symbolSize:80,
            itemStyle: {
                normal: {
                    borderColor: '#82dffe',
                    borderWidth: 4,
                    shadowBlur: 10,
                    shadowColor: '#04f2a7',
                    color: '#001c43'
                }
            },
            category: 2,

        },
        {
            name: '图书分析',
            symbolSize:80,
            category: 2,
            itemStyle: {
                normal: {
                    borderColor: '#82dffe',
                    borderWidth: 4,
                    shadowBlur: 10,
                    shadowColor: '#04f2a7',
                    color: '#001c43'
                }
            },

        });

然后把连接的信息存进去:

linkmes.push({
              source: '校园大数据',
              target: '舆情大数据'

          },
          {
              source: '校园大数据',
              target: '图书馆分析',
          },
          {
              source: '舆情大数据',
              target: '用户分析',
          },
          {
              source: '舆情大数据',
              target: '话题分析',
          },
          {
              source: '舆情大数据',
              target: '评论分析',
          },
          {
              source: '校园大数据',
              target: '图书馆分析',
          },
          {
              source: '图书馆分析',
              target: '图书分析',
          },
          {
              source: '图书馆分析',
              target: '借阅分析',
          },
          {
              source: '图书馆分析',
              target: '借阅排行',
              value: 'DNA',
          },{
              source: '图书馆分析',
              target: '图书收录'

          });

下面就由echarts来创建关系图了:

var myChart = echarts.init(document.getElementById('OdfMes'));
        option = {
            backgroundColor: '#1a4377',

            tooltip: {},
            animationDurationUpdate: 1500,
            animationEasingUpdate: 'quinticInOut',
            color:['#83e0ff','#45f5ce','#b158ff'],
            series: [
                {
                    type: 'graph',
                    layout: 'force',
                    force:{
                        repulsion:1000,
                        edgeLength:50
                    },
                    roam: true,
                    label: {
                        normal: {
                            show: true
                        }
                    },
                    data: datas,
                    links: linkmes,
                    lineStyle: {
                        normal: {
                            opacity: 0.9,
                            width: 5,
                            curveness: 0
                        }
                    },
                    categories:[
                        {name: '0'},
                        {name: '1'},
                        {name: '2'}
                    ]
                }
            ]
        }
        myChart.setOption(option);

这时一个简单的关系图就出来了:
在这里插入图片描述
接下来就是追加数据了,通过点击这些节点来添加数据:

myChart.on('click', function (params) {
//只要点击这些节点就会触发这个事件,params里面有我们点击的那个节点的信息
}

然后添加操作:

        myChart.on('click', function (params) {
            if(params.name!=null){
                //var mes=params.name.replace(/\d+/g,"")
                if(params.name=="话题分析"){
                //这里我用到了params.name,当我们点击的节点的name的值为“话题分析”时就会进入下面的方法
                    datas.push({
                        name: '图书分析a',
                        symbolSize: 80,
                        category: 2,
                        itemStyle: {
                            normal: {
                                borderColor: '#82dffe',
                                borderWidth: 4,
                                shadowBlur: 10,
                                shadowColor: '#04f2a7',
                                color: '#001c43'
                            }
                        }
                    });
                   //上面就是把新数据添加到datas里面
                    linkmes.push({
                        source: '图书分析a',
                        target: '话题分析'

                    })
                    //上面就是把连接关系添加到linkmes数组中
                    //下面这个就是重新画关系图
                    myChart.setOption({
                        series: [{
                            data: datas,
                            links: linkmes
                        }]
                    });

                }
            }
        })

PS:不能有两个或两个以上的name相同,不然links会不知道连接哪个,从而报错。
下面就是追加后的样子:
在这里插入图片描述
整个页面代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<script src="js/jquery-3.3.1.min.js"></script>
<script src="incubator-echarts-4.6.0/dist/echarts.min.js"></script>
<body>
<div id="OdfMes" style="width: 1800px;height: 800px;float: right"></div>
<script>

    var datas=[];
    var linkmes=[];//连接的信息

    datas.push({
            name: '校园大数据',

            symbolSize: 120,
            draggable: true,
            category: 0,
            itemStyle: {
                normal: {
                    borderColor: '#04f2a7',
                    borderWidth: 6,
                    shadowBlur: 20,
                    shadowColor: '#04f2a7',
                    color: '#001c43',
                }
            }
        },
        {
            name: '舆情大数据',
            symbolSize: 100,
            itemStyle: {
                normal: {
                    borderColor: '#04f2a7',
                    borderWidth: 4,
                    shadowBlur: 10,
                    shadowColor: '#04f2a7',
                    color: '#001c43',
                }
            },
            category: 1,

        },
        {
            name: '用户分析',
            symbolSize: 80,
            category: 1,
            itemStyle: {
                normal: {
                    borderColor: '#04f2a7',
                    borderWidth: 4,
                    shadowBlur: 10,
                    shadowColor: '#04f2a7',
                    color: '#001c43',
                }
            },

        },
        {
            name: '话题分析',
            symbolSize: 80,
            category: 1,
            itemStyle: {
                normal: {
                    borderColor: '#82dffe',
                    borderWidth: 4,
                    shadowBlur: 10,
                    shadowColor: '#04f2a7',
                    color: '#001c43',
                }
            },

        },
        {
            name: '评论分析',
            symbolSize: 80,
            category: 1,
            itemStyle: {
                normal: {
                    borderColor: '#82dffe',
                    borderWidth: 4,
                    shadowBlur: 10,
                    shadowColor: '#04f2a7',
                    color: '#001c43',
                }
            },

        },
        {
            name: '图书馆分析',
            symbolSize:100,
            category: 2,
            itemStyle: {
                normal: {
                    borderColor: '#82dffe',
                    borderWidth: 4,
                    shadowBlur: 10,
                    shadowColor: '#04f2a7',
                    color: '#001c43',
                }
            },

        },
        {
            name: '借阅分析',
            symbolSize:80,
            category: 2,
            itemStyle: {
                normal: {
                    borderColor: '#b457ff',
                    borderWidth: 4,
                    shadowBlur: 10,
                    shadowColor: '#b457ff',
                    color: '#001c43'
                }
            },

        },
        {
            name: '借阅排行',
            symbolSize:80,
            itemStyle: {
                normal: {
                    borderColor: '#82dffe',
                    borderWidth: 4,
                    shadowBlur: 10,
                    shadowColor: '#04f2a7',
                    color: '#001c43'

                }
            },
            category: 2,

        },
        {
            name: '图书收录',
            symbolSize:80,
            itemStyle: {
                normal: {
                    borderColor: '#82dffe',
                    borderWidth: 4,
                    shadowBlur: 10,
                    shadowColor: '#04f2a7',
                    color: '#001c43'
                }
            },
            category: 2,

        },
        {
            name: '图书分析',
            symbolSize:80,
            category: 2,
            itemStyle: {
                normal: {
                    borderColor: '#82dffe',
                    borderWidth: 4,
                    shadowBlur: 10,
                    shadowColor: '#04f2a7',
                    color: '#001c43'
                }
            },

        });
      linkmes.push({
              source: '校园大数据',
              target: '舆情大数据'

          },
          {
              source: '校园大数据',
              target: '图书馆分析',
          },
          {
              source: '舆情大数据',
              target: '用户分析',
          },
          {
              source: '舆情大数据',
              target: '话题分析',
          },
          {
              source: '舆情大数据',
              target: '评论分析',
          },
          {
              source: '校园大数据',
              target: '图书馆分析',
          },
          {
              source: '图书馆分析',
              target: '图书分析',
          },
          {
              source: '图书馆分析',
              target: '借阅分析',
          },
          {
              source: '图书馆分析',
              target: '借阅排行',
              value: 'DNA',
          },{
              source: '图书馆分析',
              target: '图书收录'

          });

    $(function () {
        var myChart = echarts.init(document.getElementById('OdfMes'));
        option = {
            backgroundColor: '#1a4377',

            tooltip: {},
            animationDurationUpdate: 1500,
            animationEasingUpdate: 'quinticInOut',
            color:['#83e0ff','#45f5ce','#b158ff'],
            series: [
                {
                    type: 'graph',
                    layout: 'force',
                    force:{
                        repulsion:1000,
                        edgeLength:50
                    },
                    roam: true,
                    label: {
                        normal: {
                            show: true
                        }
                    },
                    data: datas,
                    links: linkmes,
                    lineStyle: {
                        normal: {
                            opacity: 0.9,
                            width: 5,
                            curveness: 0
                        }
                    },
                    categories:[
                        {name: '0'},
                        {name: '1'},
                        {name: '2'}
                    ]
                }
            ]
        }
        myChart.setOption(option);
        myChart.on('click', function (params) {
            if(params.name!=null){
                //var mes=params.name.replace(/\d+/g,"")
                if(params.name=="话题分析"){
                    datas.push({
                        name: '图书分析a',
                        symbolSize: 80,
                        category: 2,
                        itemStyle: {
                            normal: {
                                borderColor: '#82dffe',
                                borderWidth: 4,
                                shadowBlur: 10,
                                shadowColor: '#04f2a7',
                                color: '#001c43'
                            }
                        }
                    });
                    linkmes.push({
                        source: '图书分析a',
                        target: '话题分析'

                    })
                    myChart.setOption({
                        series: [{
                            data: datas,
                            links: linkmes
                        }]
                    });

                }
            }
        })
    })

</script>
</body>
</html>

以上是个人学习心得,欢迎互相交流。

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值