Highcharts 树状图(Treemap)

Highcharts 树状图(Treemap)详解

Highcharts 的树状图(Treemap)是一种用矩形面积大小表示数值、颜色表示另一个维度的分层数据可视化图表,非常适合展示层级结构 + 占比/权重的场景。常见应用:

  • 公司组织架构(部门人数/预算)
  • 产品销量结构(大类 → 小类 → 单品)
  • 硬盘空间占用
  • 股票投资组合权重
  • 网站流量来源层级

Treemap 支持多层嵌套、交互钻取(drilldown)、颜色轴(colorAxis)等强大功能。

环境配置

Treemap 是 Highcharts 核心功能之一,无需额外模块(Highcharts v7+ 已内置):

<script src="https://code.highcharts.com/highcharts.js"></script>
<!-- 如果需要导出、钻取等功能,可额外引入对应模块 -->

1. 基本单层树状图示例

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>Highcharts 树状图示例</title>
    <script src="https://code.highcharts.com/highcharts.js"></script>
</head>
<body>
    <div id="container" style="width: 900px; height: 600px; margin: 50px auto;"></div>

    <script>
        Highcharts.chart('container', {
            series: [{
                type: 'treemap',                 // 关键:类型为 treemap
                layoutAlgorithm: 'squarified',   // 布局算法:squarified(最常用)、sliceAndDice、stripes、strip
                alternateStartingDirection: true, // 交替方向,视觉更均衡
                levels: [{
                    level: 1,                    // 第一层(大类)样式
                    borderWidth: 3,
                    borderColor: '#ffffff',
                    dataLabels: {
                        enabled: true,
                        align: 'left',
                        verticalAlign: 'top',
                        style: { fontSize: '16px', fontWeight: 'bold' }
                    }
                }],
                data: [{
                    id: 'A', name: '水果', color: '#FF6B6B'
                }, {
                    id: 'B', name: '蔬菜', color: '#4ECDC4'
                }, {
                    id: 'C', name: '肉类', color: '#45B7D1'
                }, {
                    name: '苹果', parent: 'A', value: 25
                }, {
                    name: '香蕉', parent: 'A', value: 18
                }, {
                    name: '橙子', parent: 'A', value: 15
                }, {
                    name: '西兰花', parent: 'B', value: 20
                }, {
                    name: '胡萝卜', parent: 'B', value: 12
                }, {
                    name: '牛肉', parent: 'C', value: 22
                }, {
                    name: '猪肉', parent: 'C', value: 28
                }]
            }],
            title: { text: '超市商品销量占比(树状图)' },
            tooltip: {
                pointFormat: '<b>{point.name}</b><br>销量占比:{point.value}%'
            }
        });
    </script>
</body>
</html>

2. 多层嵌套 + 颜色轴(colorAxis)示例

series: [{
    type: 'treemap',
    layoutAlgorithm: 'squarified',
    allowDrillToNode: true,              // 允许点击钻取
    animationLimit: 1000,
    dataLabels: { enabled: false },
    levelIsConstant: false,
    levels: [{
        level: 1,
        dataLabels: { enabled: true, style: { fontSize: '18px' } }
    }],
    data: [{
        id: 'root', name: '全球市场'
    }, {
        id: 'A', parent: 'root', name: '亚洲', value: 45
    }, {
        id: 'E', parent: 'root', name: '欧洲', value: 30
    }, {
        id: 'N', parent: 'root', name: '北美', value: 25
    }, {
        name: '中国', parent: 'A', value: 20, colorValue: 85   // colorValue 控制颜色
    }, {
        name: '印度', parent: 'A', value: 15, colorValue: 60
    }, {
        name: '日本', parent: 'A', value: 10, colorValue: 90
    }, {
        name: '德国', parent: 'E', value: 12, colorValue: 75
    }, {
        name: '法国', parent: 'E', value: 10, colorValue: 70
    }, {
        name: '美国', parent: 'N', value: 18, colorValue: 95
    }, {
        name: '加拿大', parent: 'N', value: 7, colorValue: 80
    }]
}],
colorAxis: {                                     // 颜色轴:根据 colorValue 着色
    min: 0,
    max: 100,
    stops: [[0, '#ffaaaa'], [0.5, '#ffffaa'], [1, '#aaffaa']],
    labels: { format: '{value} 分' }
},
title: { text: '全球市场份额(面积=份额,颜色=满意度)' }

3. 交互钻取(Drilldown)示例

// 主图 data 只放第一层
data: [{
    id: 'root', name: '公司部门'
}, {
    id: 'IT', parent: 'root', name: 'IT部门', value: 40, drilldown: 'IT-detail'
}, {
    id: 'Sales', parent: 'root', name: '销售部门', value: 35, drilldown: 'Sales-detail'
}],
drilldown: {
    series: [{
        id: 'IT-detail',
        type: 'treemap',
        data: [
            { name: '前端', parent: 'IT', value: 15 },
            { name: '后端', parent: 'IT', value: 18 },
            { name: '运维', parent: 'IT', value: 7 }
        ]
    }, {
        id: 'Sales-detail',
        type: 'treemap',
        data: [
            { name: '国内', parent: 'Sales', value: 20 },
            { name: '海外', parent: 'Sales', value: 15 }
        ]
    }]
}

4. 常用配置总结

配置项说明与推荐值
series.type'treemap'
layoutAlgorithm'squarified'(最常用,矩形比例好)
allowDrillToNodetrue(启用点击钻取)
levels自定义每层样式(边框、标签)
colorAxis + point.colorValue用颜色表示第三维度(如增长率、评分)
data.parent / id定义层级关系
data.value控制矩形面积(必须)

5. 布局算法对比

  • squarified:最常用,矩形接近正方形
  • sliceAndDice:水平/垂直条状(适合层级清晰)
  • stripes:条纹式
  • strip:垂直条状

树状图是 Highcharts 中展示层级 + 数值 + 颜色三维数据的最优选择之一,交互性强、视觉冲击力大。

如果你需要:

  • 带钻取的多层树状图完整示例
  • 结合 Sunburst(旭日图)对比
  • 动态加载数据的树状图
  • 导出为图片功能

告诉我具体需求,我可以提供完整代码!

文章已创建 3511

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部