一、初识 AntV G6

AntV G6 是蚂蚁集团推出的专业级图可视化引擎,适合构建关系图谱、拓扑图、流程图等场景。相比其他图形库,G6 提供完整的布局算法交互体系 ,开发者在 10 分钟内即可搭建可交互的图应用。

技术特点速览:

  • 支持 Canvas / SVG 双渲染模式
  • 内置 10+ 图布局算法
  • 提供丰富的节点/边类型
  • 完善的文档和 React 示例

二、节点(Nodes)完全指南

2.1 节点的核心属性

interface Node {id: string;          // 必须!节点的唯一标识(类似身份证号)x?: number;          // 可选,X坐标(不设置则自动布局)y?: number;          // 可选,Y坐标label?: string;      // 显示的文字标签type?: string;       // 节点类型(默认圆形,可自定义)style?: {            // 样式配置fill?: string;     // 填充颜色stroke?: string;   // 边框颜色lineWidth?: number;// 边框粗细};// 其他自定义属性...
}
█ 关键规则:
  1. id必须且唯一 的,就像每个人的身份证号
  2. 如果多个节点使用相同id,会导致渲染异常
  3. 未设置x/y时,G6会自动计算布局位置

2.2 基础节点示例

// 正确的节点配置
const nodes = [{ id: 'A', label: '服务器' }, { id: 'B', x: 100, y: 200, type: 'rect' }
];// 错误的配置 ❌
const badNodes = [{ label: '节点1' }, // 缺少id{ id: 'A' },       // 重复id{ id: 'A' }
];
█ 在React中的使用示例:
function NodeDemo() {const data = {nodes: [{ id: 'home', label: '家庭电脑', type: 'circle' },{ id: 'cloud', label: '阿里云', type: 'rect' }],edges: [] // 暂时没有连接};return <G6Graph data={data} />;
}

三、边(Edges)完全指南

3.1 边的核心属性

interface Edge {source: string;      // 必须!起点节点idtarget: string;      // 必须!终点节点idlabel?: string;      // 边的文字说明type?: string;       // 边类型(直线/曲线等)style?: {            // 样式配置stroke?: string;   // 线条颜色lineWidth?: number;// 线条粗细lineDash?: number[];// 虚线样式};
}
█ 关键规则:
  1. sourcetarget必须指向已存在的节点id
  2. 如果引用了不存在的节点id,边将不会显示
  3. 边的方向由sourcetarget决定

3.2 基础边示例

// 正确的边配置
const edges = [{ source: 'A', target: 'B' },{ source: 'B', target: 'C', label: '100Mbps' }
];// 错误的配置 ❌
const badEdges = [{ source: 'A' },              // 缺少target{ source: 'X', target: 'Y' }, // X/Y节点不存在{ target: 'B' }               // 缺少source
];

2.3 边的连接原理

  节点A (id: 'server')[边:source指向'server',target指向'client']↓节点B (id: 'client')
█ 在React中的使用示例:
function EdgeDemo() {const data = {nodes: [{ id: 'router', label: '路由器' },{ id: 'pc', label: '办公电脑' }],edges: [{ source: 'router', target: 'pc',label: '有线连接',style: {stroke: '#1890ff',lineDash: [5, 5] // 虚线效果}}]};return <G6Graph data={data} />;
}

四、完整可运行示例

4.1 家庭网络拓扑案例

import React from 'react';
import G6 from '@antv/g6';function HomeNetwork() {const containerRef = React.useRef(null);React.useEffect(() => {if (!containerRef.current) return;// 创建图实例const graph = new G6.Graph({container: containerRef.current,width: 800,height: 500,defaultNode: {size: 40,style: {fill: '#e6f7ff',stroke: '#1890ff'}},defaultEdge: {style: {stroke: '#91d5ff',lineWidth: 2}}});// 网络拓扑数据const data = {nodes: [{ id: 'modem', label: '光猫' },{ id: 'router', label: '主路由器' },{ id: 'pc1', label: '书房电脑' },{ id: 'pc2', label: '卧室电脑' }],edges: [{ source: 'modem', target: 'router' },{ source: 'router', target: 'pc1' },{ source: 'router', target: 'pc2' }]};graph.data(data);graph.render();return () => graph.destroy();}, []);return (<div><h3>家庭网络拓扑图</h3><div ref={containerRef} style={{ border: '1px solid #f0f0f0',borderRadius: '8px',margin: '20px 0'}} /></div>);
}

如图所示:

一、初识 AntV G6

AntV G6 是蚂蚁集团推出的专业级图可视化引擎,适合构建关系图谱、拓扑图、流程图等场景。相比其他图形库,G6 提供完整的布局算法交互体系 ,开发者在 10 分钟内即可搭建可交互的图应用。

技术特点速览:

  • 支持 Canvas / SVG 双渲染模式
  • 内置 10+ 图布局算法
  • 提供丰富的节点/边类型
  • 完善的文档和 React 示例

二、节点(Nodes)完全指南

2.1 节点的核心属性

interface Node {id: string;          // 必须!节点的唯一标识(类似身份证号)x?: number;          // 可选,X坐标(不设置则自动布局)y?: number;          // 可选,Y坐标label?: string;      // 显示的文字标签type?: string;       // 节点类型(默认圆形,可自定义)style?: {            // 样式配置fill?: string;     // 填充颜色stroke?: string;   // 边框颜色lineWidth?: number;// 边框粗细};// 其他自定义属性...
}
█ 关键规则:
  1. id?是必须且唯一 的,就像每个人的身份证号
  2. 如果多个节点使用相同id,会导致渲染异常
  3. 未设置x/y时,G6会自动计算布局位置

2.2 基础节点示例

// 正确的节点配置
const nodes = [{ id: 'A', label: '服务器' }, { id: 'B', x: 100, y: 200, type: 'rect' }
];// 错误的配置 ?
const badNodes = [{ label: '节点1' }, // 缺少id{ id: 'A' },       // 重复id{ id: 'A' }
];
█ 在React中的使用示例:
function NodeDemo() {const data = {nodes: [{ id: 'home', label: '家庭电脑', type: 'circle' },{ id: 'cloud', label: '阿里云', type: 'rect' }],edges: [] // 暂时没有连接};return <G6Graph data={data} />;
}

三、边(Edges)完全指南

3.1 边的核心属性

interface Edge {source: string;      // 必须!起点节点idtarget: string;      // 必须!终点节点idlabel?: string;      // 边的文字说明type?: string;       // 边类型(直线/曲线等)style?: {            // 样式配置stroke?: string;   // 线条颜色lineWidth?: number;// 线条粗细lineDash?: number[];// 虚线样式};
}
█ 关键规则:
  1. sourcetarget必须指向已存在的节点id
  2. 如果引用了不存在的节点id,边将不会显示
  3. 边的方向由sourcetarget决定

3.2 基础边示例

// 正确的边配置
const edges = [{ source: 'A', target: 'B' },{ source: 'B', target: 'C', label: '100Mbps' }
];// 错误的配置 ?
const badEdges = [{ source: 'A' },              // 缺少target{ source: 'X', target: 'Y' }, // X/Y节点不存在{ target: 'B' }               // 缺少source
];

2.3 边的连接原理

  节点A (id: 'server')[边:source指向'server',target指向'client']↓节点B (id: 'client')
█ 在React中的使用示例:
function EdgeDemo() {const data = {nodes: [{ id: 'router', label: '路由器' },{ id: 'pc', label: '办公电脑' }],edges: [{ source: 'router', target: 'pc',label: '有线连接',style: {stroke: '#1890ff',lineDash: [5, 5] // 虚线效果}}]};return <G6Graph data={data} />;
}

四、完整可运行示例

4.1 家庭网络拓扑案例

import React from 'react';
import G6 from '@antv/g6';function HomeNetwork() {const containerRef = React.useRef(null);React.useEffect(() => {if (!containerRef.current) return;// 创建图实例const graph = new G6.Graph({container: containerRef.current,width: 800,height: 500,defaultNode: {size: 40,style: {fill: '#e6f7ff',stroke: '#1890ff'}},defaultEdge: {style: {stroke: '#91d5ff',lineWidth: 2}}});// 网络拓扑数据const data = {nodes: [{ id: 'modem', label: '光猫' },{ id: 'router', label: '主路由器' },{ id: 'pc1', label: '书房电脑' },{ id: 'pc2', label: '卧室电脑' }],edges: [{ source: 'modem', target: 'router' },{ source: 'router', target: 'pc1' },{ source: 'router', target: 'pc2' }]};graph.data(data);graph.render();return () => graph.destroy();}, []);return (<div><h3>家庭网络拓扑图</h3><div ref={containerRef} style={{ border: '1px solid #f0f0f0',borderRadius: '8px',margin: '20px 0'}} /></div>);
}

如图所示:

在这里插入图片描述

4.2 代码解析

  1. 节点定义

    • 4个网络设备节点:光猫、主路由器、两台电脑
    • 每个节点都有唯一id和中文标签
  2. 边连接

    • 光猫 → 主路由器(WAN连接)
    • 主路由器 → 各电脑(LAN连接)
  3. 样式配置

    • 默认节点:天蓝色填充,蓝色边框
    • 默认边:浅蓝色实线

4.3 运行效果描述

  • 将看到4个蓝色圆形节点,标签清晰可见
  • 节点之间用浅蓝色线条连接
  • 自动布局排列成树状结构
  • 支持画布拖拽和缩放操作

五、常见问题排查

5.1 节点不显示?

? 检查项:

  1. 确认所有节点都有id字段
  2. 检查id是否重复
  3. 确认容器元素已正确挂载

5.2 边不显示?

? 检查项:

  1. 确认sourcetarget的值正确
  2. 检查引用的节点id确实存在
  3. 确认边数据在edges数组中

5.3 布局混乱?

? 解决方案:

  1. 显式设置节点坐标:
nodes: [{ id: 'A', x: 100, y: 100 },{ id: 'B', x: 300, y: 200 }
]
  1. 使用布局算法:
const graph = new G6.Graph({// ...其他配置layout: {type: 'force', // 力导向布局preventOverlap: true}
});

六、最佳实践建议

  1. ID命名规范

    // 好的示例
    { id: 'core_switch_01' }// 不好的示例 ?
    { id: '节点1' } // 避免中文
    { id: ' ' }    // 不要用空格
    
  2. 动态更新数据

    // 在React组件中
    const [graphData, setGraphData] = useState(initialData);// 添加新节点
    const addNode = () => {setGraphData(prev => ({nodes: [...prev.nodes, { id: 'newNode' }],edges: prev.edges}));
    };
    
  3. 数据校验工具

    // 验证数据格式
    const isValidData = (data) => {const nodeIds = new Set();for (const node of data.nodes) {if (!node.id || nodeIds.has(node.id)) return false;nodeIds.add(node.id);}// 检查边...return true;
    };
    

本教程所有示例均通过以下环境验证:

  • React 18.2.0
  • @antv/g6 4.8.6
  • Node.js 16.x

4.2 代码解析

  1. 节点定义

    • 4个网络设备节点:光猫、主路由器、两台电脑
    • 每个节点都有唯一id和中文标签
  2. 边连接

    • 光猫 → 主路由器(WAN连接)
    • 主路由器 → 各电脑(LAN连接)
  3. 样式配置

    • 默认节点:天蓝色填充,蓝色边框
    • 默认边:浅蓝色实线

4.3 运行效果描述

  • 将看到4个蓝色圆形节点,标签清晰可见
  • 节点之间用浅蓝色线条连接
  • 自动布局排列成树状结构
  • 支持画布拖拽和缩放操作

五、常见问题排查

5.1 节点不显示?

✅ 检查项:

  1. 确认所有节点都有id字段
  2. 检查id是否重复
  3. 确认容器元素已正确挂载

5.2 边不显示?

✅ 检查项:

  1. 确认sourcetarget的值正确
  2. 检查引用的节点id确实存在
  3. 确认边数据在edges数组中

5.3 布局混乱?

✅ 解决方案:

  1. 显式设置节点坐标:
nodes: [{ id: 'A', x: 100, y: 100 },{ id: 'B', x: 300, y: 200 }
]
  1. 使用布局算法:
const graph = new G6.Graph({// ...其他配置layout: {type: 'force', // 力导向布局preventOverlap: true}
});

六、最佳实践建议

  1. ID命名规范

    // 好的示例
    { id: 'core_switch_01' }// 不好的示例 ❌
    { id: '节点1' } // 避免中文
    { id: ' ' }    // 不要用空格
    
  2. 动态更新数据

    // 在React组件中
    const [graphData, setGraphData] = useState(initialData);// 添加新节点
    const addNode = () => {setGraphData(prev => ({nodes: [...prev.nodes, { id: 'newNode' }],edges: prev.edges}));
    };
    
  3. 数据校验工具

    // 验证数据格式
    const isValidData = (data) => {const nodeIds = new Set();for (const node of data.nodes) {if (!node.id || nodeIds.has(node.id)) return false;nodeIds.add(node.id);}// 检查边...return true;
    };
    

本教程所有示例均通过以下环境验证:

  • React 18.2.0
  • @antv/g6 4.8.6
  • Node.js 16.x

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/89003.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/89003.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/89003.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【解决】联想电脑亮度调节

更新后图标变大调节分辨率然后亮度就不能调节了快捷键WindowsX打开设备管理器右键显卡更新驱动程序选择“浏览我的电脑以查找驱动程序&#xff08;R&#xff09;”选择“让我从计算机上的可驱动程序列表中选取&#xff08;L&#xff09;”点击下一步成功解决

将Blender、Three.js与Cesium集成构建物联网3D可视化系统

将Blender、Three.js与Cesium集成构建物联网3D可视化系统&#xff0c;可实现从精细设备建模到宏观地理空间展示的全栈能力。以下是技术整合方案及典型应用场景&#xff1a;一、技术栈分工与集成逻辑 #mermaid-svg-gCvcBVB9ebl092ap {font-family:"trebuchet ms",verd…

用TensorFlow进行逻辑回归(一)

这一节我们用TensorFlow定义简单的分类器。首先考虑分类器的方程式是什么是值得的。数学习的技巧是使用sigmoid函数。sigmoid函数绘制如图3-40, 通常标记为σ, 是实数域里的函数取值(0, 1)。这个特征很便利&#xff0c;因为我们可以将sigmoid的输出解释为事件发现的概率。 (转…

【Java代码审计(2)】MyBatis XML 注入审计

代码背景&#xff1a;某公司使用 MyBatis 作为持久层框架&#xff0c;登录功能如下&#xff1a; Java 接口代码&#xff1a; public interface UserMapper {User findByUsernameAndPassword(Param("username") String username,Param("password") String p…

Spring Boot目录变文件夹?3步解决!

在 Spring Boot 项目中&#xff0c;当你在 src/main/java 下看到目录结构而不是包结构时&#xff0c;这通常是 IDE&#xff08;如 IntelliJ IDEA&#xff09;的显示问题或项目配置问题。以下是原因和解决方案&#xff1a;问题原因IDE 未正确识别 Java 源代码根目录 src/main/ja…

Appium源码深度解析:从驱动到架构

Appium源码深度解析:从驱动到架构 Appium 源码概览 Appium 是一个开源的移动自动化测试框架,支持跨平台(iOS、Android)和多种编程语言(Java、Python 等)。其源码托管在 GitHub 上,主要由 JavaScript 和 Node.js 实现,核心逻辑围绕客户端-服务器架构设计。 GitHub 仓库…

给 Excel 整列空格文字内容加上前缀:像给文字穿衣服一样简单!

目录 步骤一&#xff1a;选中目标列 打开Excel表格并定位列点击列标题选中整列 步骤二&#xff1a;输入公式&#xff0c;变身“魔法” 在公式编辑栏输入公式按下回车键查看效果 步骤三&#xff1a;向下填充&#xff0c;批量处理 鼠标定位到单元格右下角按住鼠标左键向下拖动填充…

Spring Boot 启动原理揭秘:从 main 方法到自动装配

Spring Boot 启动原理揭秘&#xff1a;从 main 方法到自动装配 引言 Spring Boot 作为 Java 领域最流行的开发框架之一&#xff0c;凭借其“开箱即用”的特性极大地简化了 Spring 应用的搭建和部署。然而&#xff0c;尽管开发者在日常工作中频繁使用 Spring Boot 的启动类&…

OpenCV 与深度学习:从图像分类到目标检测技术

一、深度学习&#xff1a;从 “人工设计” 到 “自动学习”1.1 深度学习的定位&#xff1a;AI、机器学习与深度学习的关系人工智能&#xff08;AI&#xff09;&#xff1a;是一个宽泛的领域&#xff0c;目标是构建能模拟人类智能的系统&#xff0c;涵盖推理、感知、决策等能力。…

Docker 镜像推送至 Coding 制品仓库超时问题排查与解决

Docker 镜像推送至 Coding 制品仓库超时问题排查与解决 在将 Docker 镜像推送至 Coding 的制品仓库时&#xff0c;可能会遇到 docker push 命令超时失败的问题。但使用 curl -i http://xxx.coding.xxxx.xx 测试时&#xff0c;连接却能成功建立。以下是排查过程及解决方案。 问题…

https交互原理

Https 交互时序图&#xff1a;HTTPS 通信中结合 RSA 和 AES 加密的流程&#xff0c;本质是利用 RSA 的安全特性交换 AES 密钥&#xff0c;再用高效的 AES 加密实际数据传输。HTTPS 交互核心流程&#xff08;TLS/SSL 握手&#xff09; 1. 建立 TCP 连接 客户端通过 TCP 三次握手…

LSTM入门案例(时间序列预测)| pytorch实现

需求 假如我有一个时间序列&#xff0c;例如是前113天的价格数据&#xff08;训练集&#xff09;&#xff0c;然后我希望借此预测后30天的数据&#xff08;测试集&#xff09;&#xff0c;实际上这143天的价格数据都已经有了。这里为了简单&#xff0c;每一天的数据只有一个价…

WPS、Word加载项开发流程(免费最简版本)

文章目录1 加载项对比2 WPS 加载项2.1 本地开发2.1.1 准备开发环境2.1.2 新建 WPS 加载项项目2.1.3 运行项目2.2 在线部署2.2.1 编译项目2.2.2 部署项目2.2.3 生成分发文件2.2.4 部署分发文件2.3 安装加载项2.4 取消发布3 Word 加载项3.1 本地开发3.1.1 准备开发环境3.1.2 新建…

Flink SQL 性能优化实战

最近我们组在大规模上线Flink SQL作业。首先&#xff0c;在进行跑批量初始化完历史数据后&#xff0c;剩下的就是消费Kafka历史数据进行追数了。但是发现某些作业的追数过程十分缓慢&#xff0c;要运行一晚上甚至三四天才能追上最新数据。由于是实时数仓指标计算上线初期&#…

HTML 树结构(DOM)深入讲解教程

一、HTML 树结构的核心概念 1.1 DOM&#xff08;文档对象模型&#xff09;的定义 DOM&#xff08;Document Object Model&#xff09;是 W3C 制定的标准接口&#xff0c;允许程序或脚本&#xff08;如 JavaScript&#xff09;动态访问和更新 HTML/XML 文档的内容、结构和样式。…

用鼠标点击终端窗口的时候出现:0;61;50M0;61;50M0;62;50M0

在做aws webrtc viewer拉流压测的过程中&#xff0c;我本地打开了多个终端&#xff0c;用于连接EC2实例&#xff1a; 一个终端用于启动 ‘并发master脚本’、监控master端的cpu、mem&#xff1b;一个终端用于监控master端的带宽情况&#xff1b;一个终端用于监控viewer端的cpu、…

C++-linux 5.gdb调试工具

GDB调试工具 在C/C开发中&#xff0c;程序运行时的错误往往比编译错误更难定位。GDB&#xff08;GNU Debugger&#xff09;是Linux环境下最强大的程序调试工具&#xff0c;能够帮助开发者追踪程序执行流程、查看变量状态、定位内存错误等。本章将从基础到进阶&#xff0c;全面讲…

Update~Read PLC for Chart ~ Log By Shift To be... Alarm AI Machine Learning

上图~ 持续迭代 1、增加报警弹窗,具体到哪个值,双边规格具体是多少 2、实时显示当前值的统计特征,Max Min AVG ... import tkinter as tk from tkinter import simpledialog import time import threading import queue import logging from datetime import datet…

es的自定义词典和停用词

在 Elasticsearch 中&#xff0c;自定义词典是优化分词效果的核心手段&#xff0c;尤其适用于中文或专业领域的文本处理。以下是关于 ES 自定义词典的完整指南&#xff1a; 为什么需要自定义词典&#xff1f; 默认分词不足&#xff1a; ES 自带的分词器&#xff08;如 Standard…

微算法科技技术突破:用于前馈神经网络的量子算法技术助力神经网络变革

随着量子计算和机器学习的迅猛发展&#xff0c;企业界正逐步迈向融合这两大领域的新时代。在这一背景下&#xff0c;微算法科技&#xff08;NASDAQ:MLGO&#xff09;成功研发出一套用于前馈神经网络的量子算法&#xff0c;突破了传统神经网络在训练和评估中的性能瓶颈。这一创新…