树状图:层级数据与结构关系

在展示具有明确父子关系的结构化数据时——例如组织架构图、文件系统目录、决策树或分类体系——树状图提供了一个直观的视觉框架。通过将数据节点沿分支路径排列,树状图使用户能够探索嵌套的层级结构,并从中心根节点向下追踪到各个子分支的连接关系。

树状图的工作原理

在 Apache ECharts 中,树状图使用type: 'tree'。与具有明确 X 轴和 Y 轴的标准图表不同,树状图会从包含一个name和一个可选的children数组的嵌套 JavaScript 对象中自动构建布局位置。

1. 基础设置

要构建一个基本的树状图,需定义您的嵌套数据结构,并在系列数组中设置type: 'tree'在系列数组中:

option = {
    tooltip: {
        trigger: 'item',
        triggerOn: 'mousemove'
    },
    series: [
        {
            type: 'tree',
            data: [{
                name: '首席执行官',
                children: [
                    {
                        name: '产品副总裁',
                        children: [
                            { name: '产品经理' },
                            { name: '用户体验设计师' }
                        ]
                    },
                    {
                        name: '工程副总裁',
                        children: [
                            { name: '技术负责人' },
                            { name: 'DevOps 工程师' }
                        ]
                    }
                ]
            }],
            top: '5%',
            left: '15%',
            bottom: '5%',
            right: '20%',
            symbolSize: 10,
            label: {
                position: 'left',
                verticalAlign: 'middle',
                align: 'right',
                fontSize: 12
            },
            leaves: {
                label: {
                    position: 'right',
                    verticalAlign: 'middle',
                    align: 'left'
                }
            },
            expandAndCollapse: true,
            animationDurationUpdate: 750
        }
    ]
};

 

高级布局方向

通过改变布局方向或切换到径向显示,树状图可以适应不同的空间限制和设计需求。

1. 径向树状布局

设置layout: 'radial'以将分支从中心点向外投射,非常适合具有大量叶节点的宽广层级结构:

option = {
    tooltip: {
        trigger: 'item',
        triggerOn: 'mousemove'
    },
    series: [
        {
            type: 'tree',
            layout: 'radial',
            data: [{
                name: '根节点',
                children: [
                    {
                        name: '分支 A',
                        children: [
                            { name: 'A1' },
                            { name: 'A2' },
                            { name: 'A3' }
                        ]
                    },
                    {
                        name: '分支 B',
                        children: [
                            { name: 'B1' },
                            { name: 'B2' }
                        ]
                    },
                    {
                        name: '分支 C',
                        children: [
                            { name: 'C1' },
                            { name: 'C2' },
                            { name: 'C3' },
                            { name: 'C4' }
                        ]
                    }
                ]
            }],
            top: '18%',
            bottom: '14%',
            right: '18%',
            left: '18%',
            symbolSize: 12,
            initialTreeDepth: 2,
            animationDurationUpdate: 750
        }
    ]
};

 

微调布局和样式

自定义节点符号、线条曲线和层级特定格式有助于突出大型图表中的关键结构层级。

1. 曲线连接线和基于层级的节点样式

使用 lineStyle.curveness来平滑连接线,并定义 levels数组配置,根据节点在层级中的深度来设置样式:

option = {
    tooltip: {
        trigger: 'item'
    },
    series: [
        {
            type: 'tree',
            orient: 'TB', // 从上到下的方向
            data: [{
                name: '项目根目录',
                children: [
                    {
                        name: '前端',
                        children: [
                            { name: 'React' },
                            { name: 'Vue' }
                        ]
                    },
                    {
                        name: '后端',
                        children: [
                            { name: 'Node.js' },
                            { name: 'Python' }
                        ]
                    }
                ]
            }],
            top: '10%',
            left: '10%',
            bottom: '10%',
            right: '10%',
            symbol: 'emptyCircle',
            symbolSize: 14,
            edgeShape: 'polyline', // 使用清晰的矩形连接线,而非曲线
            initialTreeDepth: 2,
            lineStyle: {
                width: 2,
                color: '#ccc'
            },
            label: {
                position: 'top',
                fontSize: 12
            },
            leaves: {
                label: {
                    position: 'bottom'
                }
            }
        }
    ]
};

 

战略最佳实践

  • 控制初始折叠深度: 设置 initialTreeDepth(例如,12)在大型数据集上使用,以在初始加载时保持图表整洁,同时允许用户点击节点展开详细信息。
  • 选择合适的布局方向:对于具有长标签文本的深层嵌套结构,使用水平(`LR`)或径向(`radial`)布局;对于浅层、宽广的组织结构,使用垂直(`TB`)布局。
  • 区分叶节点: 使用 leaves属性,以区别于父级容器节点来设置末端节点的样式,使用户能够轻松区分分支与终点。
滚动至顶部