关系图是一种图形化的表示方式,用于展示不同实体之间的关系和连接。它通常由节点和边组成,节点代表实体,边代表实体之间的关系。
在关系图中,节点可以是人、地点、组织、事件等,而边则表示这些实体之间的关系,如友谊、家庭关系、工作关系、地理位置等。关系图可以用来展示社交网络、组织结构、地理信息、知识图谱等。
关系图可以通过不同的布局方式来呈现,如树形结构、圆形结构、力导向布局等。此外,关系图还可以通过颜色、形状、大小等方式来表示节点的属性,以便更好地理解和分析数据。
连接关系:关系图展示了实体之间的连接关系,通过边表示实体之间的关联和依赖。这些连接关系可以是有向的或无向的,有助于揭示实体间的相互作用和依赖关系。
层级结构:关系图可以展示实体之间的层级结构。通过节点和边的布局和连接方式,我们可以清晰地了解实体之间的上下级关系,从而揭示组织架构、分类关系等。
多维度数据:关系图可以同时展示多个维度的数据。除了节点和边的关系之外,我们可以通过节点的形状、颜色、大小和边的粗细、颜色等属性,通过视觉编码来表示更多的信息和特征。
社交网络分析:关系图可以帮助我们理解社交网络中个体之间的连接关系,包括朋友关系、关注关系、群组关系等。通过关系图,我们可以分析社交网络的结构、影响力和社群结构,从而了解信息传播、社交影响和用户行为。
组织架构分析:关系图可以展示组织内部的部门关系、职位层级和人员关系。通过关系图,我们可以了解组织的层级结构、工作流程和沟通路径,从而优化组织架构、提升团队协作效率。
知识图谱展示:关系图在知识图谱中扮演重要角色。知识图谱是一种以实体和关系为基础的知识表示形式,关系图可以帮助我们展示实体之间的语义关系和知识关联,从而构建和探索知识图谱。
产品关系分析:关系图可以帮助我们分析产品之间的关联关系和依赖关系。通过关系图,我们可以了解产品组合、产品特性之间的关系,从而进行产品规划、市场定位和竞争分析。
数据流分析:关系图可以用于展示数据流的路径和转换过程。通过关系图,我们可以了解数据的来源、流向和转换,发现数据流程中的瓶颈和问题,从而优化数据流程和数据治理。
地理信息分析:关系图可以帮助我们展示地理位置之间的连接关系。通过关系图,我们可以理解地理位置的联系和依赖,从而进行地理信息分析、交通规划和区域发展策略。
关系图还在许多其他领域中有广泛应用,如金融风险分析、医疗数据分析、供应链管理等。无论是分析复杂网络关系、探索数据间的依赖关系,还是优化组织结构和决策制定,关系图都是一种非常有用的工具。
type
:指定图表的类型为graph
,表示创建一个关系图。
data/nodes
:表示节点的数据,每个节点通过id
和name
属性指定唯一标识和显示名称。
links
:表示边的数据,每条边通过source
和target
属性指定起点和终点。
categories
:表示节点的分类类目,可选。如果节点有分类的话可以通过 data[i].category 指定每个节点的类目,类目的样式会被应用到节点样式上。可以设置不同的颜色、标签等属性。
layout
:表示关系图的布局方式,可以选择力导向布局(force
)、环形布局(circular
)或不采用任何布局(none
),使用节点中提供的 x, y 作为节点的位置。等。
roam
:是否开启鼠标缩放和平移漫游。默认不开启。如果只想要开启缩放或者平移,可以设置成 ‘scale’ 或者 ‘move’。设置成 true 为都开启
emphasis
:表示关系图元素的高亮样式,可以在交互时突出显示节点和边。
lineStyle
:表示边的样式,可以设置颜色、宽度和类型等属性。
label
:表示标签的样式,可以设置节点和边的标签内容、位置、字体样式等属性。
npm install echarts --save
import
语句引入ECharts库import * as echarts from 'echarts';
template
中,添加一个div
元素作为图表的容器。给它一个唯一的ref
属性,以便在后面初始化图表对象时使用
const chart = ref(null)
在mounted
生命周期钩子函数中,使用echarts.init
方法初始化图表对象。
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' },
],
};
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)
})
force: {
repulsion: 1000, // 调整节点之间的距离
},
data: data.nodes.map((node, index) => {
return {
...node,
itemStyle: {
color: getRandomColor(),
},
label: {
show: true, // 设置标签默认显示
position: 'inside',
color: '#fff',
fontFamily: 'Arial',
fontSize: 12,
},
};
}),
上面代码设置节点颜色随机,这里定义了一个获取随机颜色的函数,通过配置项color调用该函数,获取各个节点的颜色值;配置label属性是节点显示标签
3. 设置鼠标悬浮高亮效果
emphasis: {
focus: 'adjacency',
label: {
show: true,
position: 'inside',
color: '#333',
fontFamily: 'Arial',
fontSize: 12,
},
},