echarts graphChart关系图简单逻辑实现

ECharts 的 graph 图表类型非常适合用来展示节点之间的关系,比如社交网络分析、系统架构图等。下面是一个简单的关系图功能,用来展示疾病与一些因素的关联关系。
在这里插入图片描述

1、数据之间的关系

首先,你需要准备数据来表示节点(nodes)和它们之间的边(links)。节点通常包括节点的名称或 ID,而边则包含两个节点之间的连接信息。

var data = {
   
    nodes: [
   	   {
   
         name: '疾病名称',
         symbolSize: [100, 100],
         itemStyle: {
   
           color: '#C280FF',
           borderColor: '#000'
         },
         value: '123456'
       }, {
   
         name: '食物1',
         symbolSize: [80, 80],
         itemStyle: {
   
           color: '#CAF982'
         },
         value: '123457'
       }, {
   
         name: '化合物1',
         symbolSize: [80, 80],
         itemStyle: {
   
           color: '#FACD91'
         },
         value: '123458'
       }, {
   
         name: '生活方式1',
         symbolSize: [80, 80],
         itemStyle: {
   
           color: '#FFFF80'
         },
         value: '123459'
       }, {
   
         name: '膳食模式1',
         symbolSize: [80, 80],
         itemStyle: {
   
           color: '#80FFFF'
         },
         value: '1234510'
       }
    ],
    links: [
        {
   
           target: '食物1',
           source: '疾病名称',
           category: 'Food'
         }, {
   
           target: '化合物1',
           source: '疾病名称',
           category: 'Compound'
         }, {
   
           target: '生活方式1',
           source: '疾病名称',
           category: 'lifestyle'
         }, {
   
           target: '膳食模式1',
           source: '疾病名称',
           category: 'dietary_pattern'
         }
    ]
};

通过仔细观察你会发现,nodes里面的数组存放的是将要展示倒关系图中的节点数据,links里面的数组存放的是,节点直接的联系。在我这个功能里,nodes的第一个节点元素是中间节点,其他节点要以它为中心进行环形分布。links中节点的target属性表示指向那个node节点,source表示将要围绕的节点,category是节点的分类,在下面的操作中我们将根据这个属性找到节点关系饼图的数据。

2、点击事件

chartClick (params) {
   
  console.log('click', params)
  if (params.componentType === 'series') {
   
    if (params.seriesType === 'graph') {
   
      if (params.dataType === 'edge') {
   
        // 点击到了 graph 的 edge(边)上。
        console.log('点击到了 graph 的 edge(边)上')
        this.showLinkModal(params)
      } else {
   
        // 点击到了 graph 的 node(节点)上。
        console.log
### Vue ECharts 关系图节点点击收缩功能实现 在 Vue 中集成 ECharts实现关系图 (Graph) 节点点击展开/折叠效果,主要涉及监听图表事件并动态更新数据源。具体方法如下: #### 1. 安装依赖库 确保项目已安装 `echarts` 和 `vue-echarts` 组件。 ```bash npm install echarts vue-echarts --save ``` #### 2. 创建组件结构 定义一个基础的关系图展示组件,在其中引入必要的模块[^1]。 ```javascript import { ref, onMounted } from 'vue'; import * as echarts from 'echarts/core'; import { GraphChart } from 'echarts/charts'; // 导入提示框,标题等组件 import { TitleComponent, TooltipComponent } from 'echarts/components'; import { CanvasRenderer } from 'echarts/renderers'; export default { setup() { const chartInstance = ref(null); // 注册所需组件 echarts.use([ GraphChart, TitleComponent, TooltipComponent, CanvasRenderer ]); onMounted(() => { initChart(); }); function initChart() { let myChart = echarts.init(chartInstance.value); // 设置初始配置项... // 添加鼠标单击事件处理程序 myChart.on('click', params => handleNodeClick(params)); } return { chartInstance }; } } ``` #### 3. 实现节点交互逻辑 当用户点击某个节点时触发回调函数 `handleNodeClick()` 来判断当前状态并对目标节点及其子级执行相应的操作[^2]。 ```javascript function handleNodeClick({ dataIndex }) { const option = this.getOption(); // 获取现有选项设置 // 查找被点击的节点对象 const clickedNode = option.series[0].data[dataIndex]; if (!clickedNode.collapsed) { // 如果未折叠,则收起该节点下的所有孩子节点 collapseChildren(clickedNode.id, true); clickedNode.collapsed = true; } else { // 否则恢复显示其下所有的孩子节点 collapseChildren(clickedNode.id, false); delete clickedNode.collapsed; } updateChart(option); // 更新视图 } function collapseChildren(parentId, collapsed) { // 遍历所有节点查找指定父ID的孩子们,并调整它们的状态 option.series[0].data.forEach(node => { if (node.parent === parentId || node.source === parentId || node.target === parentId) { node.symbolSize *= collapsed ? 0.7 : 1 / 0.7; // 缩放大小示意 node.label.show = !collapsed; // 对于更深层次的孩子也应用相同的操作 collapseChildren(node.id, collapsed); } }); } function updateChart(newOptions) { setTimeout(() => { this.setOption(newOptions); }, 0); } ``` 通过上述方式可以在 Vue 应用中轻松创建具备互动特性的 ECharts 图表实例,允许用户通过对特定节点的操作来改变整个图形布局和信息呈现形式[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sherry Tian

打赏1元鼓励作者

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值