桑基图
简介
桑基图可用于显示复杂系统中的流量、能量、材料等各种资源或流程。它使用有向无环图(DAG)结构,其中各个节点表示系统中的某些状态或事件,而边表示两个节点之间的流(通常在系统中是量与质)。
在桑基图中,节点的大小和颜色通常与其重要性和值成比例。边的宽度也与其相关的值成比例,通常还有带箭头的方向。节点和边可以用标签、图例、工具提示等方式来提供附加信息。
桑基图在许多领域中都有应用,如流量分析、能源管理、材料追溯等等。它可以帮助人们理解系统的复杂性、收集数据、发现趋势等。
图表构成
桑基图主要由节点图元和边图元、提示信息及其他组件构成。
node 图元、link 图元为桑基图的基本要素,相关的绘制配置必不可少:
sankeyChart.type
: 图表类型,桑基图的类型为'sankey'
sankeyChart.data
: 图表绘制的数据源sankeyChart.categoryField
: 分类字段,映射不同节点图元sankeyChart.valueField
: 数值字段,映射不同节点图元的长度sankeyChart.nodeAlign
: 节点对齐类型配置sankeyChart.nodeGap
: 同一层中两个节点之间的间隙大小配置sankeyChart.nodeWidth
: 每个节点的宽度sankeyChart.minNodeHeight
: 数据不为零或空时节点的最小大小,这个配置可以用来避免数据太小时看不到太细的节点,建议小于 5px
提示信息等作为辅助图表展示的组件,属于可选配置,自带默认效果和功能:
sankeyChart.tooltip
: 提示信息,默认交互时显示,详细配置见详细配置见VChart 提示信息组件配置- 更多组件配置见VChart sankeyChart 配置
快速上手
关键配置
categoryField
属性声明为类别字段,表示节点名称valueField
属性声明数值字段,表示节点之间关系的权重sourceField
和targetField
属性不需要指定,根据层级结构生成nodeKey
属性声明解析节点的key
值
桑基图特性
数据
由于桑基图用数据结构表示节点与边的关系,所以在 VChart 中,我们定义了两种方式桑基图数据结构声明方式:
1.节点与边的平坦化数据结构:
2.节点与边的嵌套数据结构:
平坦化数据
嵌套数据
图表布局
桑基图的布局主要体现在节点之间的位置关系上,下列配置可以帮助您自由调整桑基图布局:
nodeAlign
: 声明节点的对齐类型,该属性可以配置为'left' | 'right' | 'center' | 'justify' | 'start' | 'end'
nodeGap
: 声明同一层中两个节点之间的间隙大小nodeWidth
: 声明每个节点的宽度,支持三种取值:
- 百分比字符串,例如
{ nodeWidth: '12%' }
- 以'px'为单位的简单数字,例如
{ nodeWidth: 20 }
- function,通过自定义计算指定 nodeWidth
minNodeHeight
属性声明数据不为零或空时节点的最小大小,这个配置可以用来避免数据太小时看不到太细的节点,建议小于 5px
桑基图标签
在桑基图中,标签的位置可以通过sankeyChart.label.position: 'outside' | 'inside-start' | 'inside-middle' | 'inside-end' | 'left' | 'right'
进行配置。
桑基图交互
通常情况下,桑基图的父子关系和层次结构是通过 link 的连接来表示的。但是,当数据集较为复杂且层次极深时,这种方式可能不够明确。因此,在这种情况下,需要通过点击来显示父级与子级的关系,以便用户更好地了解整体数据流程与路径信息。
在 VChart 中,我们可以通过sankeyChart.emphasis
进行交互配置。
sankeyChart.emphasis.trigger
: 声明交互触发类型。可以配置为trigger?: 'click' | 'hover'
, 点击触发或悬浮触发sankeyChart.emphasis.effect
: 声明交互联动效果。 桑基图提供 3 种在节点上的交互联动效果:
- self: 仅高亮当前节点;
- adjacency: 高亮当前节点上下游节点和关联的边,淡化其它图形元素;
- related: 高亮与当前节点相关的整条路径上的节点和边,淡化其它图形元素