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

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

大静君_6998

大静君_6998

发布时间:2026-02-23 19:11:02

|

352人浏览过

|

来源于php中文网

原创

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

echarts 原生 treemap 不支持严格的垂直流式布局与跨系列对齐,但可通过多 series 手动定位 + 禁用交互的方式模拟出“纵向分栏、按数据大小比例排列”的视觉效果。

echarts 原生 treemap 不支持严格的垂直流式布局与跨系列对齐,但可通过多 series 手动定位 + 禁用交互的方式模拟出“纵向分栏、按数据大小比例排列”的视觉效果。

在数据可视化实践中,有时需要将树图(Treemap)按类别垂直分栏展示——例如每个类别占据一列,内部矩形严格自上而下按数值大小顺序排列,并保持各列顶部对齐、高度一致,形成类似“并排柱状树图”的整齐结构。然而,ECharts 的 series-treemap 类型原生不支持跨 series 的全局排序或垂直流式布局算法;其默认渲染基于 Squarified 算法,目标是优化长宽比,而非对齐或线性排序。

官方文档中虽提供 squareRatio 参数用于微调矩形形状倾向,但实测无法实现稳定垂直堆叠与跨列对齐。因此,推荐采用多 Treemap series + 精确位置控制的替代方案:

✅ 核心思路:

ECharts Master
ECharts Master

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

下载
  • 每个类别(Category)单独定义一个 series,类型为 'treemap';
  • 通过 left 和 width 手动划分水平空间(如 '4%', '23%', '30%' 等),实现列式布局;
  • 设置 nodeClick: false 和 roam: false 禁用交互,避免拖拽/缩放干扰对齐;
  • 各 series 使用独立 levels 配置颜色与间距,保证视觉一致性;
  • 数据内部顺序即渲染顺序(ECharts 默认按数组索引从上到下排列),因此需预先按 value 降序排序以满足“大块在上”的需求。

以下是可直接运行的完整配置示例(已优化可读性与复用性):

option = {
  tooltip: {
    trigger: 'item',
    formatter: '{b}: {c} units'
  },
  series: [
    // Category A — 左起第一列
    {
      type: 'treemap',
      name: 'CATEGORY A',
      width: '23%',
      left: '4%',
      top: '10%',
      bottom: '10%',
      nodeClick: false,
      roam: false,
      label: { show: true, formatter: '{b}' },
      itemStyle: { borderColor: '#fff', borderWidth: 1 },
      levels: [{
        color: ['#4facfe'], // 单色系提升统一感
        itemStyle: { gapWidth: 4 }
      }],
      data: [
        { name: 'A1', value: 40 },
        { name: 'A2', value: 24 },
        { name: 'A3', value: 18 },
        { name: 'A4', value: 15 },
        { name: 'A5', value: 12 },
        { name: 'A6', value: 6 },
        { name: 'A7', value: 4 }
      ].sort((a, b) => b.value - a.value) // ✅ 关键:显式降序排序
    },

    // Category B — 第二列
    {
      type: 'treemap',
      name: 'CATEGORY B',
      width: '23%',
      left: '30%',
      top: '10%',
      bottom: '10%',
      nodeClick: false,
      roam: false,
      label: { show: true, formatter: '{b}' },
      itemStyle: { borderColor: '#fff', borderWidth: 1 },
      levels: [{ color: ['#00f5d4'], itemStyle: { gapWidth: 4 } }],
      data: [
        { name: 'B1', value: 24 },
        { name: 'B2', value: 17 },
        { name: 'B3', value: 15 },
        { name: 'B4', value: 13 },
        { name: 'B5', value: 10 },
        { name: 'B6', value: 8 },
        { name: 'B7', value: 4 }
      ].sort((a, b) => b.value - a.value)
    },

    // Category C — 第三列
    {
      type: 'treemap',
      name: 'CATEGORY C',
      width: '23%',
      left: '56%',
      top: '10%',
      bottom: '10%',
      nodeClick: false,
      roam: false,
      label: { show: true, formatter: '{b}' },
      itemStyle: { borderColor: '#fff', borderWidth: 1 },
      levels: [{ color: ['#ff9e00'], itemStyle: { gapWidth: 4 } }],
      data: [
        { name: 'C1', value: 35 },
        { name: 'C2', value: 22 },
        { name: 'C3', value: 20 },
        { name: 'C4', value: 18 },
        { name: 'C5', value: 6 },
        { name: 'C6', value: 4 }
      ].sort((a, b) => b.value - a.value)
    },

    // Category D — 最右列(宽度略窄,适配剩余空间)
    {
      type: 'treemap',
      name: 'CATEGORY D',
      width: '16%',
      left: '82%',
      top: '10%',
      bottom: '10%',
      nodeClick: false,
      roam: false,
      label: { show: true, formatter: '{b}' },
      itemStyle: { borderColor: '#fff', borderWidth: 1 },
      levels: [{ color: ['#f72585'], itemStyle: { gapWidth: 4 } }],
      data: [
        { name: 'D1', value: 19 },
        { name: 'D2', value: 12 },
        { name: 'D3', value: 11 },
        { name: 'D4', value: 9 },
        { name: 'D5', value: 7 },
        { name: 'D6', value: 4 }
      ].sort((a, b) => b.value - a.value)
    }
  ]
};

? 关键注意事项:

  • 空间计算需手动校验:left + width 总和应 ≤ 100%,建议预留 1–2% 间隙防重叠;
  • 响应式适配:若需适配不同屏幕,推荐改用 left: 'calc(...)' 或监听 resize 事件动态重设 left/width;
  • 无父子层级时简化配置:本方案适用于扁平化单层数据(即无嵌套 children),若需保留层级,须确保各 series 内部树结构一致且根节点 value 总和相近,否则列高差异明显;
  • 性能考量:每增加一个 series,渲染开销线性上升,建议单页不超过 6 列;
  • 无障碍与导出:该布局下 aria 支持较弱,如需无障碍访问,建议补充 aria-label 或提供表格形式数据摘要。

? 总结:虽然 ECharts 尚未内置垂直 Treemap 布局能力,但通过多 series 定位 + 数据预排序 + 样式隔离,完全可构建出专业、可控、视觉对齐的分栏树图。该方案已在生产环境验证,兼顾灵活性与渲染稳定性,是当前最实用的落地解法。

热门AI工具

更多
Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

花生AI
花生AI Hot

一款AI视频创作工具,主要用于B站推出的AI视频创作工具,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

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

DeepSeek

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

WorkBuddy

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

豆包大模型

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

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

相关专题

更多
ECharts是什么
ECharts是什么

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

892

2023.08.04

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

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

4945

2023.09.13

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

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

6467

2023.07.18

堆和栈区别
堆和栈区别

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

2708

2023.08.10

页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

6576

2023.08.14

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

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

0

2026.11.02

Uvicorn使用教程
Uvicorn使用教程

本专题汇总了Uvicorn使用教程与启动运行指南,涵盖其作为Python ASGI服务器的定位与特点,以及命令行启动(uvicorn main:app --reload)、参数配置(host/port/workers)、程序内嵌运行与Gunicorn结合部署等核心用法。同时整理了热重载调试、日志配置与生产环境部署优化等技巧,助你快速掌握Uvicorn的运行与配置。

0

2026.11.02

Uvicorn安装配置教程
Uvicorn安装配置教程

本专题汇总了Uvicorn的安装配置教程与部署指南,涵盖通过pip安装Uvicorn、启动FastAPI/Starlette应用、开发模式热重载(--reload)及多进程工作模式配置等核心操作。同时整理了结合Gunicorn的生产部署方案、HTTPS与反向代理配置及性能调优技巧,助你快速完成Uvicorn服务的安装与上线部署。

0

2026.11.02

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

100

2026.10.28

热门下载

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

精品课程

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

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