跳到主要内容

treemap

概述

矩形树图根据每个节点的关联值递归地将空间划分为矩形,适用于展示带权的树形数据。 矩形树图适合展现具有层级关系的数据,能够直观体现同级之间的比较。一个 Tree 状结构转化为平面空间矩形的状态。矩形树图的好处在于,相比起传统的树形结构图,矩形树图能更有效得利用空间,并且拥有展示占比的功能。

import { Chart } from '@antv/g2';

const chart = new Chart({
  container: 'container',
});
chart.options({
  type: 'treemap',
  data: {
    type: 'custom',
    callback: (data) => ({
      name: '图表类型',
      children: [
        {
          name: '基础图表',
          children: [
            { name: '条形图', value: 300 },
            { name: '折线图', value: 600 },
            { name: '散点图', value: 160 },
            { name: '面积图', value: 160 },
            { name: '其他', value: 180 },
          ],
        },
        {
          name: '数据分析',
          children: [
            { name: '分箱', value: 280 },
            { name: '分组', value: 150 },
            { name: '回归线', value: 210 },
            { name: '其他', value: 40 },
          ],
        },
      ],
    }),
  },
  layout: {
    tile: 'treemapBinary',
    paddingInner: 1,
  },
  encode: { value: 'value' },
  style: {
    labelFill: '#000',
    labelStroke: '#fff',
    labelLineWidth: 1.5,
    labelFontSize: 14,
    labelPosition: 'top-left',
    labelDx: 5,
    labelDy: 5,
  },
});

chart.render();

更多的案例,可以查看图表示例 - 关系图页面。

数据格式

treemap 支持两种数据格式:

1. 层级结构数据(JSON)

对于已经是层级结构的数据,可以直接使用,无需配置 path:

{
  name: '根节点',
  children: [
    {
      name: '子节点1',
      children: [
        { name: '叶子节点1', value: 100 },
        { name: '叶子节点2', value: 200 }
      ]
    },
    { name: '子节点2', value: 300 }
  ]
}

2. 扁平化数据(CSV)

对于使用路径字符串表示层级关系的扁平化数据,必须配置 path 函数:

name,size
flare,
flare.analytics,
flare.analytics.cluster,
flare.analytics.cluster.AgglomerativeCluster,3938

对于这种数据格式,必须使用 path 配置:

layout: {
  path: (d) => d.name.replace(/\./g, '/'), // 将点分隔转换为斜杠分隔
}

重要说明:如果使用扁平化数据但没有配置 path,会导致 “multiple roots” 错误。这是因为:

  1. D3 的 stratify 默认期望数据有 id 和 parentId 字段来建立层级关系
  2. 扁平化数据通常只有路径字符串(如 flare.analytics.cluster),没有明确的父子关系字段
  3. 没有 path 配置时,D3 无法识别层级结构,将所有记录都视为根节点
  4. 当存在多个根节点时,D3 抛出 “multiple roots” 错误

path 配置的作用是告诉 D3 如何从路径字符串中解析出层级结构,自动推断父子关系。

配置项

属性 描述 类型 默认值 必选
layout 布局配置 TreemapLayout -
encode 配置 treemap 标记的视觉通道,包括x、y、color、value等,用于指定视觉元素属性和数据之间的关系 encode -
style 配置图形样式和标签样式 - -
labels 自定义数据标签的配置 label[] []
interaction 配置 treemap 的交互 Object -

layout

属性 描述 类型 默认值 必选
tile 布局方式 'treemapBinary' | 'treemapDice' | 'treemapSlice' | 'treemapSliceDice' | 'treemapSquarify' | 'treemapResquarify' 'treemapSquarify'
padding 外间距,另外还有 paddingInner | paddingOuter | paddingTop | paddingBottom | paddingRight | paddingLeft number 0
sort 排序规则 (a: any, b: any): number (a, b) => b.value - a.value
layer 渲染层级 number | (d) => number 0
path 路径转换函数,用于从扁平化数据中解析层级结构。对于使用路径字符串的扁平化数据,此配置是必需的 (d) => string undefined

encode

配置 treemap 标记的视觉通道。

属性 描述 类型 默认值 必选
color 绑定 treemap 标记的 color 属性通道,如果将数据字段映射到颜色通道,会对数据进行分组,将数据拆分成多个不同颜色的图形 encode -
value 绑定 treemap 标记的数值通道 encode -

style

复合图形标记需要通过不同的前缀来区分图形的配置。

  • <label>: 数据标签的前缀,例如:labelText 设置标签的 text 文本。
属性 描述 类型 默认值 必选
labelFontSize 标签文字大小 number 10
labelText 标签文字内容 (d) => last(d.path) -
labelFontFamily 标签文字字体 string -
labelFontWeight 标签文字粗细 number -
labelLineHeight 标签文字的行高 number -
labelTextAlign 设置标签文本内容的当前对齐方式 center | end | left | right | start -
labelTextBaseline 设置在绘制标签文本时使用的当前文本基线 top | middle | bottom | alphabetic | hanging
labelFill 标签文字的填充色 string -
labelFillOpacity 标签文字的填充透明度 number -
labelStroke 标签文字的描边 string -
labelLineWidth 标签文字描边宽度 number -
labelLineDash 标签文字描边的虚线配置,第一个值为虚线每个分段的长度,第二个值为分段间隔的距离。labelLineDash 设为[0,0]的效果为没有描边。 [number,number] -
labelStrokeOpacity 标签文字描边透明度 number -
labelOpacity 标签文字的整体透明度 number -
labelShadowColor 标签文字阴影颜色 string -
labelShadowBlur 标签文字阴影的高斯模糊系数 number -
labelShadowOffsetX 标签文字阴影水平偏移量 number -
labelShadowOffsetY 标签文字阴影垂直偏移量 number -
labelCursor 标签文字鼠标样式 string default
labelDx 标签文字在水平方向的偏移量 number -
labelDy 标签文字在垂直方向的偏移量 number -

更多样式可以查看文档 - 核心概念 - 样式页面。

interaction

treemap 常用的交互是 treemapDrillDown 和 poptip

treemapDrillDown 用于实现矩形树图的下钻交互,通过点击矩形树图的某个节点,可以将该节点及其子节点展示在画布上。配置如下:

属性 描述 类型 默认值 必选
breadCrumbFill 面包屑的填充色 string rgba(0, 0, 0, 0.85)
breadCrumbFontSize 面包屑字体大小 number 12
breadCrumbY 面包屑在 Y 轴的位置 number 12
activeFill 当前激活的面包屑的填充色 number rgba(0, 0, 0, 0.5)
chart.options({
  // 其他图表配置...
  interaction: {
    treemapDrillDown: {
      breadCrumbY: 12,
      activeFill: '#873bf4',
    },
  },
});

poptip用于交互时显示简洁的提示信息

chart.options({
  // 其他图表配置...
  interaction: {
    poptip: {
      // poptip 配置项
      offsetX: 10,
      offsetY: 10,
      // tip 样式配置
      tipBackgroundColor: 'rgba(0, 0, 0, 0.75)',
      tipColor: '#fff',
    },
  },
});

示例

import { Chart } from '@antv/g2';

const chart = new Chart({
  container: 'container',
});

chart.options({
  type: 'treemap',
  data: {
    type: 'fetch',
    value: 'https://assets.antv.antgroup.com/g2/flare-treemap.json',
  },
  layout: {
    path: (d) => d.name.replace(/\./g, '/'),
    tile: 'treemapBinary',
    paddingInner: 1,
  },
  encode: { value: 'size' },
  style: {
    labelText: (d) =>
      d.data.name
        .split('.')
        .pop()
        .split(/(?=[A-Z][a-z])/g)[0],
    labelFill: '#000',
    labelPosition: 'top-left',
    fillOpacity: 0.5,
  },
});

chart.render();
© Copyright 2026 Ant Group Co., Ltd..备案号:京ICP备15032932号-38
全站搜索
文档与示例输入关键词开始搜索

输入关键词,查找文档、API 与示例

↑↓选择↵打开Esc关闭