讲师中心 微信公众号
AI工具推荐 视频效率加速

ECharts 实现垂直排列且横向连接的树图(Treemap)布局方案

大静君_6998

大静君_6998

发布时间:2026-02-23 18:44:01

|

329人浏览过

|

来源于php中文网

原创

ECharts 实现垂直排列且横向连接的树图(Treemap)布局方案

echarts 原生 treemap 不支持严格的垂直流式布局与跨系列连接,但可通过多实例 treemap 手动定位+统一样式模拟实现类“垂直堆叠+水平对齐”的视觉效果。

echarts 原生 treemap 不支持严格的垂直流式布局与跨系列连接,但可通过多实例 treemap 手动定位+统一样式模拟实现类“垂直堆叠+水平对齐”的视觉效果。

在数据可视化中,当需要将多个分类(如不同业务模块、部门或时间周期)以垂直方向依次排列、横向对齐、尺寸按值比例缩放的方式呈现时,开发者常期望 Treemap 能像瀑布流或分栏布局一样可控排布。然而,ECharts 的 series-treemap 类型采用自适应矩形填充算法(基于 squarified 算法),其节点顺序与空间分配由 squareRatio、leafDepth 和数据结构共同决定,无法通过配置直接实现跨 series 的垂直流式连接布局。

官方文档中 squareRatio 参数虽可影响单个 Treemap 内部矩形的宽高倾向(例如设为较大值促使更“竖直”的子块),但它仅作用于单个系列内部,并不能协调多个 series 之间的相对位置或对齐关系。因此,若需达成类似下图所示的“垂直分列、左对齐、宽度按类别独立缩放”的效果(即每个 category 占一竖列,内部节点从上到下垂直堆叠,各列之间无缝/紧凑衔接),推荐采用以下多 Treemap 实例 + 精确坐标控制的工程化方案:

ECharts Master
ECharts Master

ECharts 图表大师。根据用户数据和业务上下文,自动设计并生成专业的 ECharts 可视化图表。使用场景:(1) 用户提供表格/JSON/CSV 数据需要可视化,(2) 用户说"帮我做个图"、"画个图表",(3) 需要将查询结果可视化展示。

下载

✅ 核心思路:拆分 + 定位 + 视觉统一

  • 将原始层级数据按顶级分类(如 A/B/C/D)拆分为多个独立 treemap series;
  • 使用 left 和 width 显式控制每个 Treemap 在画布中的水平位置与宽度;
  • 设置 roam: false 和 nodeClick: false 禁用交互,避免干扰视觉连贯性;
  • 统一 levels 配置(尤其 gapWidth、color)确保风格一致;
  • 所有 Treemap 共享相同高度(默认填满容器),形成自然的垂直对齐。

? 示例代码(可直接运行)

option = {
  tooltip: {
    trigger: 'item',
    formatter: '{b}: {c} KB'
  },
  series: [
    // Category A — 左侧第一列
    {
      type: 'treemap',
      name: 'CATEGORY A',
      width: '23%',
      left: '4%',
      height: '100%', // 确保撑满容器高度
      roam: false,
      nodeClick: false,
      label: { show: true, formatter: '{b}' },
      itemStyle: { borderColor: '#fff', borderWidth: 1 },
      levels: [{
        color: ['#4A90E2'],
        itemStyle: { gapWidth: 4 }
      }],
      data: [
        { name: 'A1', value: 40 },
        { name: 'A2', value: 6 },
        { name: 'A3', value: 24 },
        { name: 'A4', value: 15 },
        { name: 'A5', value: 12 },
        { name: 'A6', value: 4 },
        { name: 'A7', value: 18 }
      ]
    },
    // Category B — 第二列
    {
      type: 'treemap',
      name: 'CATEGORY B',
      width: '23%',
      left: '30%',
      roam: false,
      nodeClick: false,
      label: { show: true, formatter: '{b}' },
      itemStyle: { borderColor: '#fff', borderWidth: 1 },
      levels: [{
        color: ['#50C878'],
        itemStyle: { gapWidth: 4 }
      }],
      data: [
        { name: 'B1', value: 13 },
        { name: 'B2', value: 17 },
        { name: 'B3', value: 8 },
        { name: 'B4', value: 24 },
        { name: 'B5', value: 15 },
        { name: 'B6', value: 10 },
        { name: 'B7', value: 24 }
      ]
    },
    // Category C — 第三列
    {
      type: 'treemap',
      name: 'CATEGORY C',
      width: '23%',
      left: '56%',
      roam: false,
      nodeClick: false,
      label: { show: true, formatter: '{b}' },
      itemStyle: { borderColor: '#fff', borderWidth: 1 },
      levels: [{
        color: ['#2E8B57'],
        itemStyle: { gapWidth: 4 }
      }],
      data: [
        { name: 'C1', value: 4 },
        { name: 'C2', value: 20 },
        { name: 'C3', value: 6 },
        { name: 'C4', value: 18 },
        { name: 'C5', value: 22 },
        { name: 'C6', value: 35 }
      ]
    },
    // Category D — 右侧较窄列
    {
      type: 'treemap',
      name: 'CATEGORY D',
      width: '16%',
      left: '82%',
      roam: false,
      nodeClick: false,
      label: { show: true, formatter: '{b}' },
      itemStyle: { borderColor: '#fff', borderWidth: 1 },
      levels: [{
        color: ['#FF8C00'],
        itemStyle: { gapWidth: 4 }
      }],
      data: [
        { name: 'D1', value: 7 },
        { name: 'D2', value: 19 },
        { name: 'D3', value: 12 },
        { name: 'D4', value: 11 },
        { name: 'D5', value: 4 },
        { name: 'D6', value: 9 }
      ]
    }
  ]
};

⚠️ 注意事项与优化建议

  • 响应式适配:left 和 width 建议使用百分比(如 '30%')而非像素值,配合容器 resize() 保证图表缩放时布局稳定;
  • 间隙控制:所有 Treemap 的 gapWidth 应保持一致(如 4),避免列间出现不协调的空白;
  • 颜色管理:为每个 category 指定明确色系(如蓝/绿/橙),增强可读性;若需渐变,可在 levels[0].color 中传入数组;
  • 性能考量:每个 Treemap 实例均独立渲染,系列过多(>6)可能影响性能,建议结合 visibleMin 过滤微小节点;
  • 替代方案提示:如需真正支持拖拽、缩放、联动下钻等高级交互,可考虑封装为自定义组件,或改用 grid + bar / custom 系列模拟 Treemap 视觉逻辑。

该方案虽非 ECharts 原生 Treemap 的“开箱即用”特性,但凭借配置的确定性与视觉的高度可控性,已成为企业级仪表盘中实现定制化层级布局的成熟实践路径。

热门AI工具

更多
Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

相关专题

更多
ECharts是什么
ECharts是什么

ECharts是基于JavaScript的开源可视化库,能够帮助开发者轻松地实现各种复杂的数据可视化效果,提供了丰富的图表类型和交互功能。本专题为大家提供ECharts是什么的相关的文章、下载、课程内容,供大家免费下载体验。

872

2023.08.04

echarts自适应大小设置
echarts自适应大小设置

使用ECharts的自适应大小设置可以使图表能够根据不同屏幕尺寸和设备进行自适应。一种是使用resize事件,在图表容器大小改变时重新渲染图表;另一种是使用CSS样式,通过设置图表容器的宽度和高度为百分比值,使图表容器根据父元素的大小进行自适应。根据实际需求选择合适的方法,可以使图表在不同设备上都能够良好地显示和交互 。

4925

2023.09.13

treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2741

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

376

2025.12.22

深入理解算法:高效算法与数据结构专题
深入理解算法:高效算法与数据结构专题

本专题专注于算法与数据结构的核心概念,适合想深入理解并提升编程能力的开发者。专题内容包括常见数据结构的实现与应用,如数组、链表、栈、队列、哈希表、树、图等;以及高效的排序算法、搜索算法、动态规划等经典算法。通过详细的讲解与复杂度分析,帮助开发者不仅能熟练运用这些基础知识,还能在实际编程中优化性能,提高代码的执行效率。本专题适合准备面试的开发者,也适合希望提高算法思维的编程爱好者。

417

2026.01.06

C++ 数据结构与算法实现教程合集
C++ 数据结构与算法实现教程合集

以 C++ 为实现语言,系统讲解核心数据结构与算法,涵盖链表(单链表/双链表/环检测)、栈与队列(单调栈/优先队列)、二叉树(遍历/BST/AVL/红黑树)、哈希表(开地址法/链地址法)、图(邻接表/BFS/DFS/Dijkstra/拓扑排序)、常见排序算法(快排/归并/堆排/计数排序)的实现与复杂度分析,同时分享 LeetCode 刷题技巧、竞赛编程常用模板(二分/前缀和/滑动窗口/动态规划),帮助开发者夯实算法基础。

492

2026.05.09

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

6447

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2688

2023.08.10

Uvicorn 报错与问题解决教程
Uvicorn 报错与问题解决教程

本专题汇总了Uvicorn服务器常见问题与报错解决的教程合集,涵盖启动失败、端口占用、模块导入错误、事件循环冲突及热重载失效等典型故障的排查思路。同时整理了多进程与Worker配置、SSL/HTTPS证书报错、跨域与代理配置等实战解决方案,助你快速定位并解决Uvicorn运行中的各类问题。

0

2026.11.02

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn