极致呈现系列之:Echarts关系图的网络洞察

目录

  • 什么是关系图
  • 关系图的特点及应用场景
    • 关系图的特点
    • 关系图的应用场景
  • Echarts中关系图的常用属性
  • Vue3中创建关系图
  • 美化关系图样式

在数据分析和可视化领域,关系图是一种常用且重要的工具。关系图可以帮助我们直观地展示实体之间的连接关系,并发现其中的模式和趋势。 今天我们就来深入的聊一聊关系图

什么是关系图

关系图是一种图形化的表示方式,用于展示不同实体之间的关系和连接。它通常由节点和边组成,节点代表实体,边代表实体之间的关系。

在关系图中,节点可以是人、地点、组织、事件等,而边则表示这些实体之间的关系,如友谊、家庭关系、工作关系、地理位置等。关系图可以用来展示社交网络、组织结构、地理信息、知识图谱等。

关系图可以通过不同的布局方式来呈现,如树形结构、圆形结构、力导向布局等。此外,关系图还可以通过颜色、形状、大小等方式来表示节点的属性,以便更好地理解和分析数据。

关系图的特点及应用场景

关系图的特点

  1. 连接关系:关系图展示了实体之间的连接关系,通过边表示实体之间的关联和依赖。这些连接关系可以是有向的或无向的,有助于揭示实体间的相互作用和依赖关系。

  2. 层级结构:关系图可以展示实体之间的层级结构。通过节点和边的布局和连接方式,我们可以清晰地了解实体之间的上下级关系,从而揭示组织架构、分类关系等。

  3. 多维度数据:关系图可以同时展示多个维度的数据。除了节点和边的关系之外,我们可以通过节点的形状、颜色、大小和边的粗细、颜色等属性,通过视觉编码来表示更多的信息和特征。

关系图的应用场景

  1. 社交网络分析:关系图可以帮助我们理解社交网络中个体之间的连接关系,包括朋友关系、关注关系、群组关系等。通过关系图,我们可以分析社交网络的结构、影响力和社群结构,从而了解信息传播、社交影响和用户行为。

  2. 组织架构分析:关系图可以展示组织内部的部门关系、职位层级和人员关系。通过关系图,我们可以了解组织的层级结构、工作流程和沟通路径,从而优化组织架构、提升团队协作效率。

  3. 知识图谱展示:关系图在知识图谱中扮演重要角色。知识图谱是一种以实体和关系为基础的知识表示形式,关系图可以帮助我们展示实体之间的语义关系和知识关联,从而构建和探索知识图谱。

  4. 产品关系分析:关系图可以帮助我们分析产品之间的关联关系和依赖关系。通过关系图,我们可以了解产品组合、产品特性之间的关系,从而进行产品规划、市场定位和竞争分析。

  5. 数据流分析:关系图可以用于展示数据流的路径和转换过程。通过关系图,我们可以了解数据的来源、流向和转换,发现数据流程中的瓶颈和问题,从而优化数据流程和数据治理。

  6. 地理信息分析:关系图可以帮助我们展示地理位置之间的连接关系。通过关系图,我们可以理解地理位置的联系和依赖,从而进行地理信息分析、交通规划和区域发展策略。

关系图还在许多其他领域中有广泛应用,如金融风险分析、医疗数据分析、供应链管理等。无论是分析复杂网络关系、探索数据间的依赖关系,还是优化组织结构和决策制定,关系图都是一种非常有用的工具。

Echarts中关系图的常用属性

  1. type:指定图表的类型为graph,表示创建一个关系图。

  2. data/nodes:表示节点的数据,每个节点通过idname属性指定唯一标识和显示名称。

  3. links:表示边的数据,每条边通过sourcetarget属性指定起点和终点。

  4. categories:表示节点的分类类目,可选。如果节点有分类的话可以通过 data[i].category 指定每个节点的类目,类目的样式会被应用到节点样式上。可以设置不同的颜色、标签等属性。

  5. layout:表示关系图的布局方式,可以选择力导向布局(force)、环形布局(circular)或不采用任何布局(none),使用节点中提供的 x, y 作为节点的位置。等。

  6. roam:是否开启鼠标缩放和平移漫游。默认不开启。如果只想要开启缩放或者平移,可以设置成 ‘scale’ 或者 ‘move’。设置成 true 为都开启

  7. emphasis:表示关系图元素的高亮样式,可以在交互时突出显示节点和边。

  8. lineStyle:表示边的样式,可以设置颜色、宽度和类型等属性。

  9. label:表示标签的样式,可以设置节点和边的标签内容、位置、字体样式等属性。

Vue3中创建关系图

  1. 创建vue项目,安装ECharts库
npm install echarts --save
  1. 新建GraphView.vue文件,使用import语句引入ECharts库
import * as echarts from 'echarts';
  1. 创建图表容器:在GraphView组件的template中,添加一个div元素作为图表的容器。给它一个唯一的ref属性,以便在后面初始化图表对象时使用

  1. 初始化图表对象:在GraphView组件中定义chart,
const chart = ref(null)

mounted生命周期钩子函数中,使用echarts.init方法初始化图表对象。


  1. 定义数据,实际开发中,数据应该是从后台获取的,这里我们直接在前台定义,
 const data = {
    nodes: [
      { id: 'tlbb', name: '天龙八部' },
      { id: 'sdyxz', name: '射雕英雄传' },
      { id: 'sdxl', name: '神雕侠侣' },
      { id: 'xajh', name: '笑傲江湖' },
      { id: 'guojing', name: '郭靖' },
      { id: 'huangrong', name: '黄蓉' },
      { id: 'yangguo', name: '杨过' },
      { id: 'xiaolongnv', name: '小龙女' },
      { id: 'jingwu', name: '金轮寺五绝' },
      { id: 'zhouzhiruo', name: '周芷若' },
      { id: 'zhoubotong', name: '周伯通' },
      { id: 'guojinghuangrong', name: '郭靖黄蓉夫妇' },
      { id: 'yangguoxiaolongnv', name: '杨过小龙女夫妇' },
    ],
    links: [
      { source: 'tlbb', target: 'guojing' },
      { source: 'tlbb', target: 'huangrong' },
      { source: 'sdyxz', target: 'guojing' },
      { source: 'sdyxz', target: 'huangrong' },
      { source: 'sdyxz', target: 'jingwu' },
      { source: 'sdyxz', target: 'zhouzhiruo' },
      { source: 'sdxl', target: 'yangguo' },
      { source: 'sdxl', target: 'xiaolongnv' },
      { source: 'sdxl', target: 'jingwu' },
      { source: 'xajh', target: 'guojing' },
      { source: 'xajh', target: 'zhoubotong' },
      { source: 'guojing', target: 'zhouzhiruo' },
      { source: 'guojing', target: 'huangrong' },
      { source: 'guojing', target: 'guojinghuangrong' },
      { source: 'yangguo', target: 'xiaolongnv' },
      { source: 'yangguo', target: 'yangguoxiaolongnv' },
    ],
  };
  1. 配置图表参数,在GraphView组件的mounted生命周期钩子函数中,定义option对象,在里面配置图表数据,并使用chart.setOption方法配置图表的参数。
onMounted(() => {
  const myChart = echarts.init(chart.value)
  const option = {
    title: {
      text: '金庸武侠小说人物关系图',
      left: 'center',
      textStyle: {
        color: '#333',
        fontSize: 20,
        fontWeight: 'bold',
      },
    },
    tooltip: {
      trigger: 'item',
      formatter: '{b}',
    },
    series: [
      {
        type: 'graph',
        layout: 'force', 
        symbolSize: 58,
        roam: true,
        focusNodeAdjacency: true,
        edgeSymbolSize: [4, 50], 
        data: data.nodes, 
        links:data.links, 
      },
    ],
  }
  myChart.setOption(option)
})

运行程序,刷新浏览器,一个基本的散点图已经生成了,看下效果
极致呈现系列之:Echarts关系图的网络洞察_第1张图片

美化关系图样式

  1. 调整节点之间的距离
 force: {
          repulsion: 1000, // 调整节点之间的距离
},

极致呈现系列之:Echarts关系图的网络洞察_第2张图片
2. 设置节点样式

 data: data.nodes.map((node, index) => {
          return {
            ...node,
            itemStyle: {
              color: getRandomColor(),
            },
            label: {
              show: true, // 设置标签默认显示
              position: 'inside',
              color: '#fff',
              fontFamily: 'Arial',
              fontSize: 12,
            },
          };
}),

上面代码设置节点颜色随机,这里定义了一个获取随机颜色的函数,通过配置项color调用该函数,获取各个节点的颜色值;配置label属性是节点显示标签
极致呈现系列之:Echarts关系图的网络洞察_第3张图片
3. 设置鼠标悬浮高亮效果

    emphasis: {
          focus: 'adjacency',
          label: {
            show: true,
            position: 'inside',
            color: '#333',
            fontFamily: 'Arial',
            fontSize: 12,
          },
 },

极致呈现系列之:Echarts关系图的网络洞察_第4张图片
OK,关于关系图的内容就介绍到这里,有问题的小伙伴评论区留言,你也可以关注我的微信公众号“九仞山”,获取更多内容

你可能感兴趣的:(Echarts,echarts,前端,javascript,vue.js,html5)