G6 缩进树(Indented)布局完全指南:配置项、方向控制与实战示例
数据可视化前端图表库【免费下载链接】G6♾ A Graph Visualization Framework in JavaScript.项目地址https://gitcode.com/gh_mirrors/g6/G6点击查看免费下载导读Indented缩进树布局是 AntV G6 中通过水平缩进量表达树节点层级的经典布局每个节点占据一行或一列天然适合文件目录、组织架构、分类体系等层级感优先的场景。本文以 G6 官方文档中 IndentedLayout 布局指南 为骨架逐项拆解其全部配置项与复杂类型并结合仓库内源码与测试用例演示direction、indent、getSide、dropCap等参数的实际效果读完即可在你的 G6 项目中直接落地一套可运行的缩进树。一、什么是缩进树布局Indented缩进树布局通过水平方向的缩进量来表示树节点的层级。与紧凑盒CompactBox、思维导图Mindmap等层叠放射式布局不同缩进树让每个元素占据一行或一列层级越深缩进越大视觉上像极了代码编辑器里的目录树。其典型适用场景包括文件目录结构可视化如仓库里的文件树组织架构树分类体系展示如算法分类、商品类目任何需要突出层级关系的树状数据从源码角度看G6 的indented布局并非自研实现而是直接复用了antv/hierarchy库中同名布局。在 packages/g6/src/layouts/index.ts 中可以看到export { compactBox, dendrogram, indented, mindmap } from antv/hierarchy;随后该布局被注册进 G6 的内置扩展表在 packages/g6/src/registry/build-in.ts 的layout段中layout: { ... indented: indented as any, ... }因此你在配置中写layout: { type: indented, ... }时G6 会从注册表中取出该实现并执行布局计算无需额外引入或注册任何东西。二、配置项总览IndentedLayout同时支持通用布局配置项和专有配置项完整清单如下来自 IndentedLayout.zh.md属性描述类型默认值必选type布局类型需为indentedindented-✓direction布局方向根节点在左/右/中间详见下文LR \| RL \| HLRindent列间间距支持固定值或函数number \| (d?: Node) number20getWidth获取每个节点宽度仅directionH时生效(d?: Node) number-getHeight获取每个节点高度(d?: Node) number-getSide节点排布在根节点的左/右侧设置后directionH失效(d?: Node) left \| right-dropCap每个节点的第一个子节点是否换行booleantrueisLayoutInvisibleNodes不可见节点是否参与布局preLayouttrue时生效booleanfalsenodeFilter参与该布局的节点(node: NodeData) boolean() truepreLayout使用前布局在初始化元素前计算布局booleanfalseenableWorker是否在 WebWorker 中运行布局boolean-iterations迭代布局的迭代次数number-其中enableWorker、iterations属于布局通用能力preLayout亦如此并非缩进树独有而isLayoutInvisibleNodes、nodeFilter常与折叠/展开场景配合使用用于控制隐藏节点是否参与占位计算。三、核心配置深度解析1. direction根节点的三种摆位direction决定根节点与子树的相对方向LR根节点在左整体向右布局。这是默认值也是文件树最常见的形态——最左侧是根子节点逐级向右缩进。RL根节点在右整体向左布局适合从右往左阅读的场景如某些 RTL 界面。H根节点在中间左右对称分布。子节点被自动分配到左右两侧整体呈鱼骨/梳子状适合根节点需要突出居中的展示。需要特别说明的是getSide一旦设置directionH的自动分侧逻辑即被覆盖详见下文getSide小节。2. indent列间缩进indent控制相邻层级之间的水平间距默认20支持两种写法固定数值所有层级的缩进保持一致例如indent: 40。函数(d?: Node) number可根据节点动态返回缩进值实现某些分支更宽、某些分支更紧凑的自定义效果。文档给出的示例(d) { if (d.parent?.id testId) return d.parent.x 50; return 100; };该函数接收布局中的节点对象可访问d.parent、d.x等属性返回值即该节点与其父节点的水平偏移量。这在目录层级深度差异大、需要按分支控制留白时非常实用。3. getWidth / getHeight按内容自适应尺寸getHeight获取每个节点的高度影响行间距与垂直排布。getWidth获取每个节点的宽度仅在directionH时生效因为水平对称布局需要知道节点宽度才能计算左右分侧占位。两者都支持函数形式常用于按文本内容自适应例如(d) (d.id testId ? 50 : 100);在 case-indented-tree.ts 测试用例中节点宽度甚至通过真实测量文本宽度得出size: (d) [measureText({ text: d.id, fontSize: 12 }) 6, 20],即文字多宽节点就多宽与getWidth按内容自适应的思路一致。4. getSide自定义左右分侧getSide允许你手动指定每个节点落在根节点的哪一侧返回left | right。设置后directionH的自动分侧逻辑失效完全以函数返回值为准(d) (d.id testId ? left : right);这使得重点分支放左侧、其余分支放右侧这类定制化排布变得非常直观。5. dropCap首子节点是否换行dropCap默认true含义是每个节点的第一个子节点是否换到新的一行。dropCap: true所有子节点包括第一个都换行排在父节点下方形成典型的倒 L 形目录树。dropCap: false第一个子节点与父节点保持同一行紧随其后后续子节点再换行视觉上更紧凑适合节点较宽、行数较多的场景。在仓库测试用例 layout-indented.ts 中使用的是默认dropCap行为 direction: LRindent: 30的经典组合。6. 与折叠展开、不可见节点相关的配置isLayoutInvisibleNodes当preLayouttrue时决定不可见如被折叠收起的节点是否仍参与布局占位。默认false表示隐藏节点不占位。nodeFilter筛选参与布局的节点默认全部参与。preLayout是否在初始化元素前预先计算布局适合需要在首帧前拿到坐标的场景。四、完整示例代码1. 子节点自动分布direction: H根节点居中子节点自动左右分布import { Graph, treeToGraphData } from antv/g6; fetch(https://gw.alipayobjects.com/os/antvdemo/assets/data/algorithm-category.json) .then((res) res.json()) .then((data) { const graph new Graph({ container: container, data: treeToGraphData(data), autoFit: view, layout: { type: indented, direction: H, indent: 80, getHeight: () 16, getWidth: () 32, }, }); graph.render(); });这里有两个关键点treeToGraphData将 JSON 树数据转换为 G6 的图数据G6 官方还内置了treeToGraphData等工具方法导出自 packages/g6/src/exports.ts。direction: H时getWidth生效必须提供节点宽度才能正确分侧。仓库中对应的测试用例 case-indented-tree.ts 正是使用algorithm-category.json数据集位于 packages/g6/tests/dataset/algorithm-category.json并通过treeToGraphData(data)渲染与上面的示例完全同源。2. 子节点右侧分布direction: LR根节点在左所有子节点统一向右分布——最经典的目录树形态// ... 代码同上layout.direction: LR3. 子节点左侧分布direction: RL根节点在右所有子节点统一向左分布// ... 代码同上layout.direction: RL4. 自定义子节点分布getSide手动指定回归、分类两个分支放左侧其余放右侧layout: { type: indented, direction: H, indent: 80, getHeight: () 16, getWidth: () 32, getSide: (d) { if (d.id Regression || d.id Classification) return left; return right; }, }5. 首子节点不换行dropCap: falselayout: { type: indented, direction: LR, indent: 80, getHeight: () 16, getWidth: () 32, dropCap: false, }五、仓库实战从 Demo 到完整缩进树应用如果你需要的不只是静态渲染而是可折叠/展开 可拖拽调整层级的交互式缩进树仓库中的 case-indented-tree.ts 是绝佳的参考实现。该用例展示了缩进树与 G6 扩展机制的深度结合自定义节点继承BaseNode注册了indented节点内置折叠/展开按钮Badge、子节点计数徽标和新增子节点按钮自定义边继承Polyline注册indented边将控制点收敛为[[sx, ty]]实现先水平后垂直的缩进树折线自定义行为注册collapse-expand-tree折叠/展开与drag-branch拖拽节点到其他节点下作为子节点两个行为布局配置layout: { type: indented, direction: LR, isHorizontal: true, indent: 40, getHeight: () 20, getVGap: () 10, },值得注意的是该用例还使用了isHorizontal、getVGap两个参数——它们来自antv/hierarchy布局实现的通用配置其中isHorizontal与direction配合声明水平布局方向getVGap控制兄弟节点垂直间距在官方文档的专有配置表中未单列但从仓库测试用例可以推断其作用。如果你需要精细控制行间距可以尝试它们。此外layout-indented.ts 提供了一个更精简的基线示例使用 file-system.json 文件系统数据direction: LR、indent: 30、getHeight/getWidth返回固定值 16配合edge: { type: polyline }即可得到标准的文件树缩进布局适合作为最小可运行模板。六、性能与工程实践建议综合文档与源码实现落地缩进树时有几点实践建议数据规模较大时开启 WorkerenableWorker: true可将布局计算放入 WebWorker避免阻塞主线程渲染iterations适用于迭代类布局的收敛控制。折叠场景配合preLayout如果使用collapse-expand行为动态收起/展开子树可考虑preLayout: trueisLayoutInvisibleNodes: false让隐藏分支不参与占位布局结果更紧凑。边类型建议缩进树与polyline折线边是天然搭档——仓库所有缩进树用例均使用 polyline 或自定义折线边水平垂直的走线能强化层级关系。direction: H必须提供getWidth水平对称布局依赖节点宽度计算左右占位缺失时布局可能不符合预期。缩进树适合行式层级数据若数据以层级嵌套的 JSON 组织如children数组配合treeToGraphData转换即可直接使用无需手动构建nodes/edges。总结Indented缩进树布局是 G6 中实现文件树 / 组织架构 / 分类目录类可视化最高效的方案之一配置简单type: indented即可启用、方向灵活LR / RL / H 三态、定制能力强indent、getWidth/getHeight、getSide、dropCap均可函数化。通过antv/hierarchy的底层实现与 G6 内置注册build-in.ts开发者无需额外依赖即可开箱即用若需交互能力仓库中的 case-indented-tree.ts 提供了折叠、展开、拖拽改层级的完整范式可直接参考改造进自己的业务中。赞分享数据可视化前端图表库【免费下载链接】G6♾ A Graph Visualization Framework in JavaScript.项目地址https://gitcode.com/gh_mirrors/g6/G6点击查看免费下载相关推荐G6 脑图树布局Mindmap完全指南左右双向展开的树布局配置与实战G6 脑图树布局Mindmap完全指南左右双向展开的树布局配置与实战 导读 本文面向使用 G6 进行树形数据可视化思维导图、数据血缘图等的开发者系统数据可视化前端图表库G6 生态树Dendrogram布局完全指南配置、方向与辐射模式实战G6 生态树Dendrogram布局完全指南配置、方向与辐射模式实战 生态树Dendrogram布局是 G6 图可视化框架中面向 层次聚类数据 的经典数据可视化前端图表库G6 力导向布局Force Layout完全指南物理模拟原理、配置项详解与实战示例G6 力导向布局Force Layout完全指南物理模拟原理、配置项详解与实战示例 力导向布局Force Directed Layout是 G6 中最数据可视化前端图表库创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Salt 虚拟执行模块 sysctl 全解析:跨平台内核参数管理(Linux/macOS 实现与持久化原理)

Salt 虚拟执行模块 sysctl 全解析:跨平台内核参数管理(Linux/macOS 实现与持久化原理)

运维配置管理后端 【免费下载链接】salt Software to automate the management and configuration of infrastructure and applications at scale. 项目地址: https://gitcode.com/gh_mirrors/sa/salt 点击查看 免费下载 sysctl 是 Salt 中一个典型的"虚拟执行…

2026/9/24 3:11:22 阅读更多 →
芯片IP选型实战指南:技术、商业与工程落地的三维平衡

芯片IP选型实战指南:技术、商业与工程落地的三维平衡

/* 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 3:11:22 阅读更多 →
立创EDA铺铜批量过孔:5分钟搞定整板地孔阵列

立创EDA铺铜批量过孔:5分钟搞定整板地孔阵列

/* 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 3:10:22 阅读更多 →

最新新闻

AI陪伴机器人生产部署清单-从云服务器到稳定运行

AI陪伴机器人生产部署清单-从云服务器到稳定运行

10-生产部署清单-从云服务器到稳定运行系列:AI 伙伴(AI-Partner)——具身智能陪伴机器人 数据接口部署与二次开发篇(10/12)一、先说结论:这套 Demo 距离生产差几步 AI 伙伴(AI-Partner&#xf…

2026/9/24 3:45:44 阅读更多 →
all-in-rag 食谱知识库实战:以一份简易红烧肉菜谱为例的数据准备全流程解析

all-in-rag 食谱知识库实战:以一份简易红烧肉菜谱为例的数据准备全流程解析

教程人工智能大模型RAG 【免费下载链接】all-in-rag 🔍大模型应用开发实战一:RAG 技术全栈指南,在线阅读地址:https://datawhalechina.github.io/all-in-rag/ 项目地址: https://gitcode.com/datawhalechina/all-in-ra…

2026/9/24 3:45:44 阅读更多 →
AutoCAD硬件加速与显卡驱动优化指南

AutoCAD硬件加速与显卡驱动优化指南

/* 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 3:45:44 阅读更多 →
陪诊行业爆发:平台 + 陪诊师 + 医院 + 渠道多方分账怎么解?

陪诊行业爆发:平台 + 陪诊师 + 医院 + 渠道多方分账怎么解?

随着老龄化加剧、优质医疗资源紧张和城市就医流程复杂化,陪诊服务正在从 “小众帮忙” 变成城市家庭的高频刚需。一线城市陪诊平台数量已超过 200 家,不少项目从医院周边的小团队,快速成长为连接患者、陪诊师、医院渠道、保险公司和推荐人的医…

2026/9/24 3:45:43 阅读更多 →
先验证谁付钱——「2026年,手机就能做」可复制的 AI 步骤拆解

先验证谁付钱——「2026年,手机就能做」可复制的 AI 步骤拆解

**项目名片(学习向)**赛道:内容创作变现模式:广告/橱窗(公开常见路径)启动门槛:低到中适合人群:图文创作者核心承诺:先验证谁付钱重要声明:本文为 **AI 应用与…

2026/9/24 3:45:43 阅读更多 →
AI大模型重构在线旅游:从行程规划到供应链的实战拆解

AI大模型重构在线旅游:从行程规划到供应链的实战拆解

/* 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 3:44:43 阅读更多 →

日新闻

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

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

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

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/23 4:55:02 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/23 4:49:06 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/23 9:53:41 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/23 9:53:40 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/23 9:53:40 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/23 9:53:40 阅读更多 →