Echarts开发人物关系网络图

转载地址:https://blog.csdn.net/xqhadoop/article/details/78286270

引言: 
人物关系可视化是将人与人之之间通过某属性进行连接而形成的关系网络,通过可视化技术展现出来。而baidu的Echarts是一款非常敏捷,迅速,酷炫的js可视化工具

1.Echarts介绍

ECharts,一个纯 Javascript 的图表库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖轻量级的 Canvas 类库 ZRender,提供直观,生动,可交互,可高度个性化定制的数据可视化图表。

ECharts 3 中更是加入了更多丰富的交互功能以及更多的可视化效果,并且对移动端做了深度的优化。

ECharts 提供了常规的折线图,柱状图,散点图,饼图,K线图,用于统计的盒形图,用于地理数据可视化的地图,热力图,线图,用于关系数据可视化的关系图,treemap,多维数据可视化的平行坐标,还有用于 BI 的漏斗图,仪表盘,并且支持图与图之间的混搭。

Echarts官网地址为: http://echarts.baidu.com

2.人物关系网络

<html>
<head>
  <meta charset="UTF-8">
<title>用户详细信息</title>
 <style>
body { margin-top: 3em; background: #eee; color: #555; font-family: "Open Sans", "Segoe UI", Helvetica, Arial, sans-serif; }
p, p a { font-value: 12px;text-align: center; color: #888; }
</style>
    <script src="echarts-all.js"></script>
    <script src="js/drawl.js"></script>
   </head>
  <body>
    <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
   <div style="padding:20px;width:100%;height:100%;"> 
        <!-- 为 ECharts 准备一个具备大小(宽高)的 DOM -->
               <div id="main" style="width: 1104px;height:464px;">
               </div>
 </div>
  <!-- 进行ajax发送并接收数据,最后根据接收的数据完成可视化工作 -->
  <script>
  var myChart = echarts.init(document.getElementById('main'), 'macarons');
  //创建Nodes
  nodes=[
                {category:0, name: '乔布斯', value : 10, label: '乔布斯\n(主要)'},
                {category:1, name: '丽萨-乔布斯',value : 2},
                {category:1, name: '保罗-乔布斯',value : 3},
                {category:1, name: '克拉拉-乔布斯',value : 3},
                {category:1, name: '劳伦-鲍威尔',value : 7},
                {category:2, name: '史蒂夫-沃兹尼艾克',value : 5},
                {category:2, name: '奥巴马',value : 8},
                {category:2, name: '比尔-盖茨',value : 9},
                {category:2, name: '乔纳森-艾夫',value : 4},
                {category:2, name: '蒂姆-库克',value : 4},
                {category:2, name: '龙-韦恩',value : 1},
            ],
    //创建links
            links=[
                {source : '丽萨-乔布斯', target : '乔布斯', weight : 1, name: '女儿\r'},
                {source : '保罗-乔布斯', target : '乔布斯', weight : 2, name: '父亲'},
                {source : '克拉拉-乔布斯', target : '乔布斯', weight : 1, name: '母亲'},
                {source : '劳伦-鲍威尔', target : '乔布斯', weight : 2},
                {source : '史蒂夫-沃兹尼艾克', target : '乔布斯', weight : 3, name: '合伙人'},
                {source : '奥巴马', target : '乔布斯', weight : 1},
                {source : '比尔-盖茨', target : '乔布斯', weight : 6, name: '竞争对手'},
                {source : '乔纳森-艾夫', target : '乔布斯', weight : 1, name: '爱将'},
                {source : '蒂姆-库克', target : '乔布斯', weight : 1},
                {source : '龙-韦恩', target : '乔布斯', weight : 1},
                {source : '克拉拉-乔布斯', target : '保罗-乔布斯', weight : 1},
                {source : '奥巴马', target : '保罗-乔布斯', weight : 1},
                {source : '奥巴马', target : '克拉拉-乔布斯', weight : 1},
                {source : '奥巴马', target : '劳伦-鲍威尔', weight : 1},
                {source : '奥巴马', target : '史蒂夫-沃兹尼艾克', weight : 1},
                {source : '比尔-盖茨', target : '奥巴马', weight : 6},
                {source : '比尔-盖茨', target : '克拉拉-乔布斯', weight : 1},
                {source : '蒂姆-库克', target : '奥巴马', weight : 1}
            ]
categoryArray=[{name:"核心人物"},{name:"家人"},{name:"朋友"}]
jsondata={"categories":categoryArray,"nodes":nodes,"links":links}  
//数据格式为Json格式
createGraph(myChart,jsondata)
  </script>
 </body>
</html>

echarts-all.js是经过压缩的echarts项目涉及的全部代码,可直接从官网下载。

drawl.js代码如下:

function getOption(graphInfo){
//给节点设置样式
graphInfo.nodes.forEach(function (node) {
    //node.itemStyle = null;//
    //node.symbolSize = node.size;//强制指定节点的大小   
    // Use random x, y
    node.x = node.y = null;
    node.draggable = true;
});


title=graphInfo['title']
nodes=graphInfo['nodes']
links=graphInfo['links']
categories=graphInfo['categories']

//设置option样式
option = {
    title : {
        text:title,
        x:'right',
        y:'bottom'
    },
    tooltip : {
        trigger: 'item',
        formatter: '{a} : {b}'
        //formatter: function(params){//触发之后返回的参数,这个函数是关键
        //if (params.data.category !=undefined) //如果触发节点
        //   window.open("http://www.baidu.com")
        //}
    },
    color:['#EE6A50','#4F94CD','#B3EE3A','#DAA520'],
    toolbox: {
        show : true,
        feature : {
            restore : {show: true},
            magicType: {show: true, type: ['force', 'chord']},
            saveAsImage : {show: true}
        }
    },
    legend: {
        x: 'left',
        data: categories.map(function (a) {//显示策略
            return a.name;
        })
    },
    series : [
        {
            type:'force',
            name : title,
            ribbonType: false,
            categories : categories,
            itemStyle: {
                normal: {
                    label: {
                        show: true,
                        textStyle: {
                            color: '#333'
                        }
                    },
                    nodeStyle : {
                        brushType : 'both',
                        borderColor : 'rgba(255,215,0,0.4)',
                        borderWidth : 1
                    },
                    linkStyle: {
                        type: 'curve'
                    }
                },
                emphasis: {
                    label: {
                        show: false
                        // textStyle: null      // 默认使用全局文本样式,详见TEXTSTYLE
                    },
                    nodeStyle : {
                        //r: 30
                    },
                    linkStyle : {}
                }
            },
            useWorker: false,
            minRadius : 15,
            maxRadius : 25,
            gravity: 1.1,
            scaling: 1.1,
            roam: 'move',
            nodes:nodes,
            links :links
        }
    ]
};
return option   
}
function createGraph(myChart,mygraph){
//设置option样式
option=getOption(mygraph)
//使用Option填充图形
myChart.setOption(option);
//点可以跳转页面
myChart.on('click', function (params) {
            var data=params.value
            //点没有source属性
            if(data.source==undefined){
                nodeName=params.name
                window.open("http://www.baidu.com")
            }

});
//myChart.hideLoading();
}

可视化结果图如下:

这里写图片描述

  • 9
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
人物关系力导向是一种表形式,用于展示多个人物之间的关系。它可以用于社交网络分析、组织架构分析、知识谱等领域。在echarts中,可以使用graph组件实现人物关系力导向。 以下是实现人物关系力导向的步骤: 1. 引入echarts库和graph组件 ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>人物关系力导向</title> <script src="https://cdn.jsdelivr.net/npm/echarts@5.2.2/dist/echarts.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/echarts-gl@1.1.4/dist/echarts-gl.min.js"></script> </head> <body> <div id="main" style="width: 100%;height: 800px;"></div> <script> // 引入graph组件 echarts.use([require('echarts/chart/graph'), require('echarts/chart/lines')]); </script> </body> </html> ``` 2. 准备数据 ```javascript var data = { nodes: [ { name: '张三', category: 0 }, { name: '李四', category: 1 }, { name: '王五', category: 1 }, { name: '赵六', category: 2 }, { name: '钱七', category: 2 }, { name: '孙八', category: 2 }, ], links: [ { source: 0, target: 1 }, { source: 0, target: 2 }, { source: 1, target: 3 }, { source: 1, target: 4 }, { source: 2, target: 5 }, ] }; ``` nodes数组表示每个人物,包括姓名和所属类别(用于分类显示)。links数组表示人物之间的关系,每个关系由source和target表示,分别指向源节点和目标节点。 3. 配置echarts选项 ```javascript var option = { tooltip: {}, legend: { data: ['同事', '朋友', '亲戚'] }, series: [ { type: 'graph', layout: 'force', symbolSize: 50, roam: true, label: { show: true, position: 'right', formatter: '{b}' }, force: { repulsion: 100 }, data: data.nodes, links: data.links, categories: [ { name: '同事' }, { name: '朋友' }, { name: '亲戚' } ] } ] }; ``` 其中,type为graph表示使用graph组件,layout为force表示使用力导向布局。symbolSize表示节点大小,roam表示是否开启拖拽和缩放。label表示节点标签,formatter为标签格式化函数。force表示力导向布局的参数,repulsion表示节点之间的斥力大小。categories用于分类显示,每个类别包括名称和对应的索引。 4. 渲染echarts表 ```javascript var chart = echarts.init(document.getElementById('main')); chart.setOption(option); ``` 最终效果如下所示: ![人物关系力导向](https://img-blog.csdnimg.cn/20210902161120193.png)

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值