Antv G6入门之旅--combo图
目录
什么是AntV G6
G6 的特性
G6 文档
安装
1 在项目中使用 NPM 包引入
2 在 HTML 中使用 CDN 引入
使用
Step 1 创建容器
Step 2 数据准备
Step 3 创建关系图
Step 4 配置数据源,渲染
React 中使用 G6
Combo图
什么是AntV G6
G6 是一个图可视化引擎。它提供了图的绘制、布局、分析、交互、动画等图可视化的基础能力。旨在让关系变得透明,简单。让用户获得关系数据的 Insight,为数据科学家和开发者提供了一种全新的方式来展示和探索数据。我曾经使用过 ECharts 与 D3.js,当我遇见 AntV G6 后,突感惊喜,其内含丰富的效果与强大的功能。相对于 ECharts,AntV G6 的图表种类更多,也更灵活,更容易上手;而相对于 D3.js,AntV G6 的 API 更为简单易用,适合快速上手。
基于 G6,用户可以快速搭建自己的 图分析 或 图编辑 应用。
如果您还没有使用过 G6, 建议通过 快速上手 抢先体验 G6 的魅力。
G6 的特性
G6 作为一款专业的图可视化引擎,具有以下特性:
- 优秀的性能:支持大规模图数据的交互与探索;
- 丰富的元素:内置丰富的节点与边元素,自由配置,支持自定义;
- 可控的交互:内置 10+ 交互行为,支持自定义交互;
- 强大的布局:内置了 10+ 常用的图布局,支持自定义布局;
- 便捷的组件:优化内置组件功能及性能;
- 友好的体验:根据用户需求分层梳理文档,支持 TypeScript 类型推断。
除了默认好用、配置自由的内置功能,元素、交互、布局均具有高可扩展的自定义机制。
G6 文档
- G6 入门教程
- G6 核心概念
- G6 扩展阅读
- API
- G6 Blog
安装
1 在项目中使用 NPM 包引入
Step 1: 使用命令行在项目目录下执行以下命令:
npm install --save @antv/g6
Step 2: 在需要用的 G6 的 JS 文件中导入:
import G6 from '@antv/g6';
2 在 HTML 中使用 CDN 引入
// version <= 3.2<script src="https://gw.alipayobjects.com/os/antv/pkg/_antv.g6-{$version}/build/g6.js"></script>// version >= 3.3<script src="https://gw.alipayobjects.com/os/lib/antv/g6/{$version}/dist/g6.min.js"></script>// version >= 4.0<script src="https://gw.alipayobjects.com/os/lib/antv/g6/4.3.11/dist/g6.min.js"></script>
⚠️ 注意:
- 在
{$version}
中填写版本号,例如3.7.1
;- 最新版可以在 NPM 查看最新版本及版本号;
- 详情参考 Github 分支:GitHub - antvis/G6: ♾ A Graph Visualization Framework in JavaScript。
使用
你可以通过以下的代码来创建一个基础的图形:
import G6 from '@antv/g6'; const graph = new G6.Graph({ container: 'mountNode', // 指定挂载节点的id width: 800, // 指定图形的宽度 height: 600, // 指定图形的高度
});
在这里,我们创建了一个基础的图形实例。
创建一个 G6 的关系图仅需要下面几个步骤:
- 创建关系图的 HTML 容器;
- 数据准备;
- 创建关系图;
- 配置数据源,渲染。
Step 1 创建容器
需要在 HTML 中创建一个用于容纳 G6 绘制的图的容器,通常为 div
标签。G6 在绘制时会在该容器下追加 canvas
标签,然后将图绘制在其中。
<div id="mountNode"></div>
Step 2 数据准备
引入 G6 的数据源为 JSON 格式的对象。该对象中需要有节点(nodes
)和边(edges
)字段,分别用数组表示:
const data = {// 点集nodes: [{id: 'node1', // String,该节点存在则必须,节点的唯一标识x: 100, // Number,可选,节点位置的 x 值y: 200, // Number,可选,节点位置的 y 值},{id: 'node2', // String,该节点存在则必须,节点的唯一标识x: 300, // Number,可选,节点位置的 x 值y: 200, // Number,可选,节点位置的 y 值},],// 边集edges: [{source: 'node1', // String,必须,起始点 idtarget: 'node2', // String,必须,目标点 id},],
};
注意:
nodes
数组中包含节点对象。每个节点对象中唯一的、必要的id
以标识不同的节点,x
、y
指定该节点的位置;edges
数组中包含边对象。source
和target
是每条边的必要属性,分别代表了该边的起始点id
与 目标点id
。- 点和边的其他属性参见链接:内置节点 和 内置边。
Step 3 创建关系图
创建关系图(实例化)时,至少需要为图设置容器、宽和高。
const graph = new G6.Graph({container: 'mountNode', // String | HTMLElement,必须,在 Step 1 中创建的容器 id 或容器本身width: 800, // Number,必须,图的宽度height: 500, // Number,必须,图的高度
});
Step 4 配置数据源,渲染
graph.data(data); // 读取 Step 2 中的数据源到图上
graph.render(); // 渲染图
React 中使用 G6
如果你想在 React 中使用 G6 ,可以参考我们提供了的 React 中使用 G6 的 Demo。
更多关于 React 中如何使用 G6,请参考 React 中使用 G6 的文档。有任何问题都可以通过页面底部的钉钉交流群和我们沟通,也非常欢迎给我们提 issues 或 PR: GitHub - antvis/G6: ♾ A Graph Visualization Framework in JavaScript。
Combo图
接下来,让我们来创建一些节点和边,组成一个Combo图。
Combo图是一种特殊的图形,它结合了多种图形类型(比如节点图和边图)的优点。在AntV G6中,你可以通过简单地组合不同的节点类型和边类型来创建Combo图。以下是一个创建Combo图的例子:
import G6 from '@antv/g6'; const data = { nodes: [ { id: 'node1', label: 'Node 1', type: 'circle' }, { id: 'node2', label: 'Node 2', type: 'rect' }, { id: 'node3', label: 'Node 3', type: 'ellipse' }, ], edges: [ { source: 'node1', target: 'node2', type: 'line' }, { source: 'node2', target: 'node3', type: 'curve' }, { source: 'node3', target: 'node1', type: 'arrow' }, ],
}; const graph = new G6.Graph({ container: 'mountNode', // 指定挂载节点的id width: 800, // 指定图形的宽度 height: 600, // 指定图形的高度
}); graph.data(data); // 加载数据
graph.render(); // 渲染图形
在这个例子中,我们创建了一个包含三种节点类型(圆形、矩形和椭圆形)和三种边类型的Combo图。每个节点都有自己的类型,并且每条边都有自己的类型。通过这种方式,我们可以创建出非常复杂且富有表现力的Combo图。
此外,AntV G6还提供了许多其他的配置项,例如节点的样式、边的样式、标签、动画等等。你可以通过阅读官方文档来了解更多关于AntV G6的信息。这些配置项可以让你更加灵活地控制你的Combo图的表现形式。例如:
graph.node(node => { return { type: node.shape, // 根据节点数据定义节点类型 style: { fill: node.color, // 根据节点数据定义节点颜色 // 其他样式设置... }, label: { text: node.label, // 根据节点数据定义标签文本 // 其他标签设置... }, };
});
实现一个复杂combo:
// 缩略图
const minimap = new G6.Minimap({size: [150,100],type: "delegate"
});// 右键菜单
const contextmenu = new G6.menu({...});// 节点提示框
const tooltip = new G6.Tooltip({...});// 边框提示框
const edgetooltip = new G6.Tooltip({...});// 画布
const graph = new G6.Graph({container: "g6",width: _this.data.width,height: _this.data.height,sortByCombo: true,fitView: true,enabledStack: true,defaultNode: {type: "image",img: _this.data.nodesLegend.url,size: [50],style: {cursor: "pointer"}},defaultEdge: {type: "line",style: {cursor: "pointer"},labelCfg: {position: "start",autoRotate: true,refX: 10,refY: 10}},groupByTypes: false,defaultCombo: {type: "rect",style: {fill: "#f3f9ff",stroke: "a3b1bf",lineWidth: 1},labelCfg: {refY: 10,position: "top",style: {fontSize: 12}}},nodeStateStyles: {...},edgeStateStyles: {...},comboStateStyles: {...},modes: {default: [ ...],...,// 分区,可拖拽画布、缩放画布、拖拽节点、拖拽combo、shift矩形框选、自定义增加combo、自定义删除comboeditCombo: [{type: "drag-canvas",enableOptimize: true},{type: "zoom-canvas",sensitivity: 1.8},{ // 禁止拖动到空白画布type: "drag-node",delegate: false,onlyChangeComboSize: false,shouldEnd: (s, e, self) => {if (e) return true;return false; }},{type: "drag-combo",enableDelegate: true,onlyChangeComboSize: true},{ // shift+左键,矩形框选type: "brush-select",brushStyle: {fill: "lightblue",fillOpacity: 0.2,stroke: "lightblue",lineWidth: 1}},{ // 双击combo 收缩/展开type: "collapse-expand-combo",trigger: "dblclick",relayout: false // 收缩展开后,不重新布局},// 自定义编辑节点"click-add-combo", // 新增"delete-combo" // 删除],},plugins: [minimap, contextmenu, tooltip, edgetooltip]
})G6.registerBehavior("click-add-combo", {});
G6.registerBehavior("delete-combo", {});graph.setMode(mode);
graph.zoom(zoom);
graph.data(this.data);
graph.render();
this.data.graph = graph;
实现效果
相关文章:

Antv G6入门之旅--combo图
目录 什么是AntV G6 G6 的特性 G6 文档 安装 1 在项目中使用 NPM 包引入 2 在 HTML 中使用 CDN 引入 使用 Step 1 创建容器 Step 2 数据准备 Step 3 创建关系图 Step 4 配置数据源,渲染 React 中使用 G6 Combo图 什么是AntV G6 G6 是一个图可视化引擎…...

聊聊分布式架构09——分布式中的一致性协议
目录 01从集中式到分布式 系统特点 集中式特点 分布式特点 事务处理差异 02一致性协议与Paxos算法 2PC(Two-Phase Commit) 阶段一:提交事务请求 阶段二:执行事务提交 优缺点 3PC(Three-Phase Commit&#x…...
探索流视频的发送
1.网络连接 2.主设备将某处视频开始的视频数据发送给从设备。 之前有读取本地视频并播放的demo,所以可以先测试网络连接的问题。 先用模拟器进行模拟吧。方便进行测试。 是的,可以使用Android设备使用上述库或框架来构建实时Web应用程序。虽然这些库和框架在Java服…...

[ACTF2020 新生赛]Include 1
题目环境:超链接,点进去看看你能找到flag吗?除了这些网页什么都没有,但是不当紧,因为我们有一双善于发现的眼睛👀F12瞅瞅无,并无其他等等URL看了吗?发现存在一个参数file,…...

教师必备宝藏,强烈推荐
亲爱的教师朋友们,你们是不是在为学期末成绩查询而头疼呢?一学期下来,成堆的试卷和成绩单,还有学生家长的各种咨询,让人应接不暇。现在,我给你们分享一个教师必备的宝藏,让你们的成绩查询工作变…...

「北大社送书」学习MATLAB—从算法到实战
MATLAB科学计算从入门到精通 一句话推荐书籍特色内容简介书籍概览 从代码到函数,从算法到实战,从问题到应用,由浅入深掌握科学计算方法,高效解决实际问题。 一句话推荐 科学计算基础入门,高效解决实际问题。 书籍特色…...

clion安装C++远程linux开发并调试 从装centos虚拟机到完美开发调试
下载镜像 阿里云镜像 从vmware上安装虚拟机并提权开放ssh 更新编译环境 一般 gcc gdb 版本都是比较低的,适配不了clion的最低要求。 升级gdb参考博客 升级gcc参考博客 安装CMAKE 官方的源使用wget即可下载 未找到openssl的解决办法 注意版本,又踩个…...

Android笔记
目录 触摸事件java弱引用WorkerThread注解NonNull注解camera.setFrameProcessingFormat(ImageFormat.YUV_420_888);YUV_420_888的字节数据长啥样YUV_420_888的字节数组长啥样 触摸事件 java弱引用 创建对象的弱引用,在没有强引用指向改对象的情况下,垃圾…...
Java虚拟机内存区域、异常、垃圾收集器
java虚拟机 java内存区域 jvm的主要组成部分及作用 主要包含两个子系统和两个组件 子系统 类加载器(Class loader):根据给定的类路径来装载class文件到运行时数据区 …...
深入理解JVM虚拟机第十三篇:详解JVM中的程序计数器
文章目录 一:程序计数器 1:概念 2:官方说法 3:图解 4:特点...

《合成孔径雷达成像算法与实现》Figure5.5
clc clear close all%% 参数设置 Ta 64; % 脉冲持续时间 Ka -1.56e-2; % 方位向调频率 Delta_f_dop abs(Ta*Ka); …...
leetcode经典面试150题---2.移除元素
题目描述 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新…...

【尘缘赠书活动:01期】Python数据挖掘——入门进阶与实用案例分析
引言 本案例将根据已收集到的电力数据,深度挖掘各电力设备的电流、电压和功率等情况,分析各电力设备的实际用电量,进而为电力公司制定电能能源策略提供一定的参考依据。更多详细内容请参考**《Python数据挖掘:入门进阶与实用案例…...

计算机网络(谢希仁)第八版课后题答案(第二章)
1.物理层要解决哪些问题?物理层的主要特点是什么? (1)物理层要尽可能地屏蔽掉物理设备和传输媒体,通信手段的不同,使数据链路层感觉不到这些差异,只考虑完成本层的协议和服务。 (2)给其服务用户(数据链路…...

搭建nuxt3项目(框架构建)
需求 目标:我想搭建一个nuxt3的框架,实现一些基本的组件和路由、页面,方便后续遇到相关ssr项目直接复用。 同时:记录关于nuxt3的使用介绍关于Nuxt(详解以及周边) Nuxt 框架 1、一种基于 Node.js 的服务端…...

系统架构设计之微内核架构(Microkernel Architecture)
微内核架构(Microkernel Architecture) 一. 什么是微内核架构二. 微内核架构风格-拓扑结构三. 微内核的核心系统设计的三个关键点3.1 插件管理3.2 插件连接3.3 插件通信 四. 微内核架构的优缺点 一. 什么是微内核架构 微内核架构是一种面向功能进行拆分的…...

51单片机实现换能器超声波测水深
一,超声波换能器定义: 定义1:可把电能、机械能或声能从一种形式转换为另一种形式的能的装置。 所属学科:测绘学下的测绘仪器。 定义2:能量转换的器件。在水声领域中常把声呐换能器、水声换能器、电声换能器统称换能器。…...

Spring Cloud Config
Spring Cloud Config 服务端:一个集中化配置中心,可以是一个独立的服务,也可以注册到服务治理中心,它可以集中管理各个 微服务的配置; 作用原理是从某个地方读取(本地/云端)提供给其客户端作为配置; 客户端:作为一个服务端,通过读取Config的服务端来获取自己的配置文件; 服务…...

易基因: Nature Biotech:番茄细菌性青枯病的噬菌体联合治疗|国人佳作
大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 生物防治是利用细菌接种剂来改变植物根际微生物群落的组成,但在以往研究中存在有接种的细菌在根际建立不良,与本地微生物组争夺资源,干扰本地微生物的…...

震坤行亮相2023工博会,并荣获第23届中国工博会“CIIF信息技术奖”
震坤行亮相2023工博会,并荣获第23届中国工博会“CIIF信息技术奖” 2023年9月19日,2023年第23届中国国际工业博览会CIIF(以下简称“工博会”)在上海国家会展中心盛大开幕。震坤行紧跟智能制造产业发展步伐,携数字化解决…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...

如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向
在人工智能技术呈指数级发展的当下,大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性,吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型,成为释放其巨大潜力的关键所在&…...