首页/新闻资讯/正文详情

G6 内置扩展全景指南:从动画、交互到布局与插件的注册与配置

发布时间:2026/9/24 7:25:19 来源:云帆数科 栏目:资讯中心
G6 内置扩展全景指南:从动画、交互到布局与插件的注册与配置
数据可视化前端图表库【免费下载链接】G6♾ A Graph Visualization Framework in JavaScript.项目地址https://gitcode.com/gh_mirrors/g6/G6点击查看免费下载G6 是一个基于 JavaScript 的图可视化框架其强大之处在于高度模块化的扩展Extension体系动画、交互行为、节点/边/组合元素、布局算法、色板、主题、插件、数据转换乃至底层图形形状全部以统一的注册机制提供给使用者。本文以 内置扩展文档 为主体结合仓库源码深入讲解 G6 内置扩展的完整清单、注册类型与配置方式帮助你在实际项目中快速选中合适的扩展并正确挂载同时理解其底层注册原理以便按需自定义注册自己的扩展。一、扩展体系总览一切皆可注册从源码看G6 将扩展按类别Category统一管理。打开 内置扩展注册文件 可以看到注册表以对象形式按类别组织const BUILT_IN_EXTENSIONS: ExtensionRegistry { animation: { combo-collapse: ComboCollapse, ... }, behavior: { brush-select: BrushSelect, ... }, combo: { circle: CircleCombo, rect: RectCombo }, edge: { cubic: Cubic, line: Line, ... }, layout: { antv-dagre: AntVDagreLayout, ... }, node: { circle: Circle, diamond: Diamond, ... }, palette: { spectral, tableau, oranges, greens, blues }, theme: { dark, light }, plugin: { bubble-sets: BubbleSets, ... }, transform: { arrange-draw-order: ArrangeDrawOrder, ... }, shape: { circle: GCircle, ... }, };这些扩展会在项目导入时通过 preset.ts 中的registerBuiltInExtensions()自动注册无需用户手动操作。注册的核心逻辑位于 register.tsexport function registerT extends ExtensionCategory(category: LoosenT, type: string, Ctor: ExtensionRegistry[T][string]) { const ext EXTENSION_REGISTRY[category][type]; if (ext) print.warn(The extension ${type} of ${category} has been registered before, and will be overridden.); Object.assign(EXTENSION_REGISTRY[category]!, { [type]: Ctor }); }注册后扩展被存放在 store.ts 的EXTENSION_REGISTRY中使用时通过 get.ts 中的getExtension(category, type)按类别与类型取出构造器并实例化。也就是说注册类型type 字符串就是你在配置项中书写的那把钥匙而实际执行的类由注册表映射而来。补充说明文档表格与内置注册表并非完全一一对应。例如 build-in.ts 中还额外内置了fishbone、snake布局、auto-adapt-label行为、edge-bundling、title插件以及arrange-draw-order、collapse-expand-combo、map-node-size、update-related-edges等数据转换注册表比文档表格更完整需要时可查阅源码确认最新清单。二、动画扩展Animation动画扩展用于元素的进场、更新、退场等阶段属于注册在元素配置上的扩展。扩展注册类型描述ComboCollapsecombo-collapse组合收起ComboExpandcombo-expand组合展开NodeCollapsenode-collapse节点收起NodeExpandnode-expand节点展开PathInpath-in路径进入PathOutpath-out路径退出Fadefade渐变Translatetranslate平移配置方式在GraphOptions.[node|edge|combo].animation.[stage]中使用其中stage对应元素生命周期阶段如update、enter、exit。示例const graph new Graph({ // ... 其他配置 node: { animation: { update: translate, // 更新阶段仅使用平移动画 }, }, });从源码看动画扩展注册在animation类别下其类型为STDAnimation见 registry/types.ts即一份动画规格描述对象而非类实例。展开/收起类动画combo-collapse、node-collapse 等常与collapse-expand行为配合使用可参考仓库 行为/元素演示用例 了解实际组合效果。三、交互行为扩展Behavior交互行为是 G6 中最常用的一类扩展负责监听画布与元素事件并驱动状态变化。扩展注册类型描述BrushSelectbrush-select框选ClickSelectclick-select点击选中CollapseExpandcollapse-expand展开/收起元素CreateEdgecreate-edge创建边DragCanvasdrag-canvas拖拽画布DragElementForcedrag-element-force力导向拖拽元素DragElementdrag-element拖拽元素FixElementSizefix-element-size缩放画布时固定元素大小FocusElementfocus-element聚焦元素HoverActivatehover-activate悬停激活LassoSelectlasso-select套索选择OptimizeViewportTransformoptimize-viewport-transform操作画布时隐藏元素ScrollCanvasscroll-canvas滚动画布ZoomCanvaszoom-canvas缩放画布配置方式在GraphOptions.behaviors中配置支持字符串简写与对象形式const graph new Graph({ // ... 其他配置 behaviors: [drag-canvas, zoom-canvas, drag-element], });behaviors数组中的每一项可以是字符串、带参数的配置对象甚至是返回配置的函数。这些配置会先经 parseExtensions 归一化为标准格式自动生成key形如behavior-drag-canvas-0再由 ExtensionController 的setExtensions通过 diff 对比进入/更新/退出/保留的扩展并分别实例化或销毁。例如需要给行为传参时可写为behaviors: [ drag-canvas, { type: zoom-canvas, sensitivity: 2 }, { type: click-select, multiple: true }, ],行为扩展的实现类分布在 src/behaviors 目录下每个文件对应一个行为仓库的 行为测试用例 与 行为演示 提供了丰富的参考样例。四、元素扩展Element元素扩展包含节点、边、组合三大类决定数据如何被绘制成图上的视觉实体。4.1 节点Node扩展注册类型描述circleCircle圆形节点diamondDiamond菱形节点ellipseEllipse椭圆节点hexagonHexagon六边形节点htmlHTMLHTML 节点imageImage图片节点rectRect矩形节点starStar星形节点donutDonut甜甜圈节点triangleTriangle三角形节点配置方式有两种在GraphOptions.data.nodes[number].type中配置单条数据指定类型在GraphOptions.node.type中配置全局默认类型未指定时兜底。const graph new Graph({ // ... 其他配置 data: { nodes: [{ id: node-1, type: circle }], }, node: { type: circle, }, });节点实现位于 src/elements/nodes 目录如circle.ts、rect.ts、html.ts等演示用例可参考 元素节点演示。4.2 边Edge扩展注册类型描述Cubiccubic三次贝塞尔曲线Lineline直线Polylinepolyline折线Quadraticquadratic二次贝塞尔曲线CubicHorizontalcubic-horizontal水平三次贝塞尔曲线CubicVerticalcubic-vertical垂直三次贝塞尔曲线CubicRadialcubic-radial径向三次贝塞尔曲线配置方式同节点在GraphOptions.data.edges[number].type中配置在GraphOptions.edge.type中配置。边实现位于 src/elements/edges 目录不同曲线类型对应的 demo 可参考 cubic、polyline、quadratic 等演示文件。4.3 组合Combo扩展注册类型描述CircleCombocircle圆形组合RectComborect矩形组合配置方式同节点在GraphOptions.data.combos[number].type中配置在GraphOptions.combo.type中配置。组合实现位于 src/elements/combos 目录使用示例可参考 element-combo 演示 与 组合拖拽测试。五、布局扩展Layout布局算法负责为图数据计算节点坐标是决定图长相的关键一环。扩展注册类型描述AntVDagreLayoutantv-dagreAntV Dagre 布局ComboCombinedLayoutcombo-combined组合布局CompactBoxLayoutcompact-box紧凑树ForceAtlas2Layoutforce-atlas2ForceAtlas2 力导向布局CircularLayoutcircular环形布局ConcentricLayoutconcentric同心圆布局D3ForceLayoutd3-forceD3 力导向布局DagreLayoutdagreDagre 布局DendrogramLayoutdendrogram生态树ForceLayoutforce力导向布局FruchtermanLayoutfruchtermanFruchterman 力导向布局GridLayoutgrid网格布局IndentedLayoutindented缩进树MDSLayoutmds高维数据降维布局MindmapLayoutmindmap脑图树RadialLayoutradial径向布局RandomLayoutrandom随机布局配置方式在GraphOptions.layout中配置同样支持字符串与对象两种形式const graph new Graph({ // ... 其他配置 layout: { type: force, }, });带参数时直接扩展对象layout: { type: force, preventOverlap: true, linkDistance: 80, }布局实现位于 src/layouts 目录G6 内置布局之外的d3-force等依赖外部库实现。注意force、fruchterman等布局还有 GPU/WASM 变体演示如 layout-fruchterman-gpu.ts、layout-forceatlas2-wasm.ts供性能敏感场景参考。六、色板扩展Palette色板用于为元素自动分配颜色内置色板取自 palettes 文档片段spectral暖到冷渐变的连续光谱色深红 → 橙 → 黄 → 浅绿 → 蓝 → 紫tableauTableau 经典分类色蓝、橙、红、青、绿、黄、紫、粉、棕、灰 10 色oranges橙色单色渐变浅橙 → 深橙共 9 级greens绿色单色渐变浅绿 → 深绿共 9 级blues蓝色单色渐变浅蓝 → 深蓝共 9 级。配置方式在GraphOptions.[node|edge|combo].palette中配置示例const graph new Graph({ // ... 其他配置 node: { palette: tableau, }, });色板定义位于 src/palettes 目录类型见 types.ts。当节点数据未显式指定颜色时G6 会按数据顺序从色板中依次取色。七、主题扩展Theme主题用于统一定义画布、节点、边、文字等全局视觉样式。注册类型描述dark深色主题light浅色主题配置方式在GraphOptions.theme中配置示例const graph new Graph({ // ... 其他配置 theme: dark, });主题实现位于 src/themes 目录base.ts、dark.ts、light.ts。与行为、插件不同theme与palette在注册表中保存的是配置对象而非类见 registry/types.ts 中theme类型为Theme、palette类型为STDPalette这也是它们配置方式更声明式的原因。八、插件扩展Plugin插件用于为图挂载辅助能力如小地图、工具栏、提示框等。扩展注册类型描述BubbleSetsbubble-sets气泡集EdgeFilterLensedge-filter-lens边过滤镜GridLinegrid-line网格线Backgroundbackground背景Contextmenucontextmenu上下文菜单Fisheyefisheye鱼眼放大镜Fullscreenfullscreen全屏展示Historyhistory历史记录Hullhull轮廓包围Legendlegend图例Minimapminimap小地图Snaplinesnapline对齐线Timebartimebar时间条Toolbartoolbar工具栏Tooltiptooltip提示框Watermarkwatermark水印配置方式在GraphOptions.plugins中配置示例const graph new Graph({ // ... 其他配置 plugins: [minimap, contextmenu], });插件同样支持对象配置以传入参数plugins: [ minimap, { type: tooltip, getContent: (datum) 节点 ${datum.id} }, ],插件实现位于 src/plugins 目录每个插件一个子目录如minimap/、contextmenu/、tooltip/。插件相关的单测位于 插件测试目录可直接查看各插件的初始化参数与行为约定。九、数据转换扩展Transform数据转换Transform在数据进入布局与渲染之前对图数据做预处理用于解决平行边、标签重叠等数据层面的问题。扩展注册类型描述ProcessParallelEdgesprocess-parallel-edges平行边PlaceRadialLabelsplace-radial-labels径向标签配置方式在GraphOptions.transforms中配置示例const graph new Graph({ // ... 其他配置 transform: [process-parallel-edges, place-radial-labels], });注意配置项名为transforms原文档示例中写为单数transform实际生效的是复数形式transforms可在 运行时 transform 配置 与 spec/transform.ts 中确认。数据转换实现位于 src/transforms 目录例如 process-parallel-edges.ts 会将同一起止点的多条边错开排布避免重叠place-radial-labels.ts 负责为径向布局的节点标签避让。对应演示见 transform-process-parallel-edges.ts 与 transform-place-radial-labels.ts。十、图形扩展Shape图形Shape是最底层的绘制单元用于自定义元素时拼装视觉结构。注册类型描述circle圆形ellipse椭圆group分组htmlHTMLimage图片line直线path路径polygon多边形polyline折线rect矩形text文本label标签badge徽标使用方式自定义元素时在元素类成员方法 upsert 的第二个参数传入图形注册类型。例如this.upsert(shape-key, text, { text: label, fontSize: 16 }, this);upsert是 BaseElement 提供的核心方法若同名图形已存在则更新其样式否则创建新图形从而实现图形的高效复用与局部更新。自定义节点的完整教程见 自定义节点文档。在 build-in.ts 中可以看到shape类别下除label、badge外多数图形直接来自antv/g的基础图形circle、rect、line、path、polygon、polyline、ellipse、group、html、image、textlabel与badge则是 G6 在 elements/shapes 中封装的复合图形。十一、注册你自己的扩展内置扩展之外的扩展如自定义节点、自定义行为、自定义布局、第三方插件需要手动注册且只需注册一次即可全局使用。注册 API 的签名与内置注册表完全一致import { register, BaseNode } from antv/g6; class CircleNode extends BaseNode {} register(node, circle-node, CircleNode); // 注册后即可在配置中使用 const graph new Graph({ node: { type: circle-node }, });register的可选类别与 ExtensionRegistry 保持一致node、edge、combo、theme、palette、layout、behavior、plugin、animation、transform、shape。若重复注册同名扩展register.ts 会打印警告并覆盖旧实现。所有扩展的实例生命周期创建、更新、销毁统一由 ExtensionController 管理因此自定义扩展只需继承对应基类并实现约定方法即可无缝接入 G6 的渲染与更新流程。总结G6 的内置扩展覆盖了动画、交互、元素、布局、色板、主题、插件、数据转换与底层图形九大类别统一以注册类型字符串暴露给用户。掌握各扩展的注册类型与配置入口animation、behaviors、node/edge/combo、layout、palette、theme、plugins、transforms再结合 build-in.ts 这份官方清单和 register 的注册机制你既能快速搭建出满足业务需求的图应用也能在此基础上扩展出自己的自定义能力。赞分享数据可视化前端图表库【免费下载链接】G6♾ A Graph Visualization Framework in JavaScript.项目地址https://gitcode.com/gh_mirrors/g6/G6点击查看免费下载相关推荐G6 滚动画布交互 ScrollCanvas 完全指南配置、原理与实战G6 滚动画布交互 ScrollCanvas 完全指南配置、原理与实战 本篇技术指南聚焦 G6A Graph Visualization Framework数据可视化前端图表库G6 插件机制完全指南从内置插件到自定义扩展G6 插件机制完全指南从内置插件到自定义扩展 导读 插件Plugin是 G6 图可视化框架中最灵活的扩展机制它让开发者可以在不侵入图渲染主流程的前提下数据可视化前端图表库在 G6 中为图配置布局从 d3-force 入门到内置布局类型全景在 G6 中为图配置布局从 d3 force 入门到内置布局类型全景 这篇技术指南以 G6 官方 Getting Started 系列中的布局章节 step数据可视化前端图表库创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

WezTerm + Lua 配置指南:打造高效 CLI 编程终端
WezTerm + Lua 配置指南:打造高效 CLI 编程终端

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 7:25:01

AI PLC智能升级:新设备原生集成与存量设备无感接入双路径
AI PLC智能升级:新设备原生集成与存量设备无感接入双路径

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 7:24:48

Java全栈项目部署上线实战:从Spring Boot到Nginx全流程
Java全栈项目部署上线实战:从Spring Boot到Nginx全流程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 7:24:42

八千里工业设计的品牌故事:三千个产品设计的远方
八千里工业设计的品牌故事:三千个产品设计的远方

八千里工业设计的品牌故事:三千个产品设计的远方 2013年,深圳。制造业正热的年月,一群在深圳做工业设计、相信"好设计能改变产品"的人聚到了一起,成立了八千里工业设计。也是那一年,我们在阿里巴巴1688开了店… · 2026/9/24 11:21:24

Python字典更新有个坑,你可能已经踩了
Python字典更新有个坑,你可能已经踩了

"为什么线上数据会丢字段?"凌晨两点,我盯着日志里残缺的JSON数据,发现问题的根源竟是一个用了多年的字典更新操作。这次线上事故让我意识到:dict.update()在合并字典时,会悄无声息地覆盖嵌套字典的全部内容—… · 2026/9/24 11:21:18

MySQL 上云怎么选服务器:用 buffer pool、IOPS、连接数与 binlog 增长判断通用型还是内存型
MySQL 上云怎么选服务器:用 buffer pool、IOPS、连接数与 binlog 增长判断通用型还是内存型

MySQL 迁移上云时,最常见的配置方法是“数据库有多大就买多大内存”或“照搬原服务器核数”。这两种方法都容易误判:数据库总容量不等于热数据工作集,连接数不等于活跃并发,云硬盘容量也不等于可获得的 IOPS 和吞吐。 更可靠的做… · 2026/9/24 11:21:11

STM32F103C8T6 寄存器流水灯实验报告
STM32F103C8T6 寄存器流水灯实验报告

芯片:STM32F103C8T6 功能:GPIOA、GPIOB、GPIOC 三端口,4 个 LED(3 个外接 LEDPC13 板载 LED)轮流流水,间隔 1s,寄存器直接编程 一、实验目的 熟悉 STM32 GPIO 寄存器工作原理,掌握寄… · 2026/9/24 11:21:03

手把手教你用Arduino和光电二极管DIY一台光功率计
手把手教你用Arduino和光电二极管DIY一台光功率计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 11:20:31

手把手教你用OpenStock搭建开源股票行情分析系统
手把手教你用OpenStock搭建开源股票行情分析系统

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 11:20:24

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码