本文档介绍了 Apache ECharts 中的桑基图和流程图功能。桑基图是一种特殊的流程图,用于可视化资源、能源、材料或成本在节点之间的流动。ECharts 提供了一个专门的系列类型来创建这些可视化,具有可自定义的节点、链接和交互行为。
ECharts 中的桑基图通过 'sankey' 系列类型实现。它们显示节点之间的定向流动,其中每个链接的宽度与它代表的流量成正比。这些图特别适用于可视化能源、材料或成本在不同系统或流程之间的转移。
来源:src/chart/sankey/SankeyView.ts20-34 test/sankey.html57-74
ECharts 中的桑基图实现由几个关键组件组成,它们协同工作以创建可视化。
来源:src/chart/sankey/SankeyView.ts35-102 src/chart/sankey/SankeyView.ts103-350
SankeyView 类是桑基图的主要渲染器。它继承自基类 ChartView,并负责处理
来源:src/chart/sankey/SankeyView.ts103-350
SankeyPath 类是桑基图中链接的自定义路径渲染器。它继承自基础的 graphic.Path 类,用于创建连接节点的贝塞尔曲线。主要特点包括:
来源:src/chart/sankey/SankeyView.ts56-101
桑基图需要两个主要的数据数组:nodes 和 links。
节点代表资源流动的实体。基本节点格式是:
{
name: string, // Node name for display and identification
depth?: number, // Optional depth for manual layout positioning
itemStyle?: { // Visual styling for the node
// Style properties
},
label?: { // Label configuration
// Label properties
}
}
链接代表节点之间的流动。基本链接格式是:
{
source: string, // Name of source node
target: string, // Name of target node
value: number // Flow value, determines the width of the link
}
示例数据配置
来源:test/sankey.html57-74 test/sankey-depth.html47-104 test/sankey-labelValue.html45-61
ECharts 中的桑基图支持水平和垂直方向,可以通过 orient 选项进行配置。
在水平布局中,节点从左到右排列,链接在它们之间水平流动。
在垂直布局中,节点从上到下排列,链接在它们之间垂直流动。
可以使用以下选项控制布局行为:
| 选项 | 描述 |
|---|---|
orient | 指定方向:'horizontal'(默认)或 'vertical' |
nodeWidth | 节点矩形的宽度 |
nodeGap | 相同深度的节点之间的间隙 |
layout | 通过 depth 指定使用预定义节点位置或手动设置坐标,来指定 'none' |
来源:src/chart/sankey/SankeyView.ts165-183 test/sankey.html107-126
桑基图为节点和链接提供了多种视觉定制选项。
节点渲染为矩形,可以使用各种视觉属性进行样式设置。
来源:src/chart/sankey/SankeyView.ts262-293
链接渲染为宽度与流量值成比例的贝塞尔曲线。
链接的 color 属性可以具有特殊值:
'source':使用源节点的颜色'target':使用目标节点的颜色'gradient':创建从源到目标颜色的渐变来源:src/chart/sankey/SankeyView.ts358-383 test/sankey.html68-71
levels 选项允许为不同深度的节点应用不同的样式。
来源:test/sankey-level.html63-106
ECharts 桑基图支持多种交互功能以增强用户体验。
当启用 focusNodeAdjacency 时,悬停在节点或链接上会高亮显示相邻的节点和链接。
来源:test/sankey.html65 test/sankey-depth.html125
emphasis 选项控制节点和链接被高亮显示时的视觉外观。
focus 属性可以设置为:
'self':只高亮悬停的元素'adjacency':高亮相邻的节点和链接'trajectory':高亮整个流动路径来源:test/sankey.html159-161 src/chart/sankey/SankeyView.ts245-252
可以通过设置 draggable 属性使节点可拖动。
拖动节点时,会分派一个带有新位置的 'dragNode' 操作,可以在后续渲染中使用它来更新节点的位置。
来源:src/chart/sankey/SankeyView.ts315-337
桑基图支持节点和链接的可自定义标签。
节点标签默认显示节点名称,并可通过各种选项进行配置。
来源:src/chart/sankey/SankeyView.ts276-289
边标签可以显示流量值并进行自定义。
来源: src/chart/sankey/SankeyView.ts203-228 test/sankey-labelValue.html72-89
这里展示了桑基图的完整配置结构
来源: test/sankey.html57-74 test/sankey-level.html52-107 test/sankey-labelValue.html63-92
桑基图的渲染过程包括创建节点和链接的几个步骤
来源: src/chart/sankey/SankeyView.ts114-346
本文档主要关注桑基图,但 ECharts 还支持其他流程可视化类型,这些类型也可能适用于类似场景
对于具有大量节点和链接的大型桑基图
来源: test/sankey.html test/sankey-depth.html test/sankey-level.html