SuperAPI AI 工具集

syncfusion-vue-sankey-chart

前端与建站

查看项目

更新于 10-16 14:54

技能介绍

用途

Syncfusion Vue Sankey Chart 是一个加权流量可视化组件,通过节点(nodes)表示阶段或类别,通过连线(links)表示节点之间的流动,并以连线粗细的比例来表达数值大小。当需求是展示“流向关系”而非静态对比时,该组件更为适用。

典型使用场景包括:能源生产到消费的流向、供应链流转、预算分配、ETL 管道、网站流量路径等。

不建议在以下需求中使用桑基图:仅做类别对比、时间序列趋势分析、或需要深层级展开的层级结构。

主要能力

组件围绕节点与连线两大核心概念构建:

  • 节点规则:每个节点必须有唯一 id;在可读性重要时应显式设置 label;样式可全局应用或按节点设置;节点宽度、内边距与填充属于视觉控制,而非数据控制。
  • 连线规则:sourceId 必须与已存在的节点 ID 匹配;targetId 必须与已存在的节点 ID 匹配;value 必须为数值且为正数;连线外观一般进行全局配置,除非需要针对性覆盖。

在外观与样式方面,主要类别包括:图表尺寸、节点外观、连线外观、标题与副标题、标签格式、主题 CSS 引入、外边距与间距。生产环境的建议做法是:宽度使用 width="100%" 并配合固定高度;保持适中的不透明度,使重叠连线仍可辨认;当流动来源最重要时使用基于来源的着色;保持节点标签简短。

标签与提示框方面:标签可提升可读性,但过长标签会挤占图表空间。建议保持标签文本简洁,用标签做概括、用提示框呈现细节,避免在较小图表区域内强制显示过多标签。

图例与标题方面:当颜色用于表达类别或分组时使用图例;当图表脱离周边说明文字单独展示时使用标题。常见做法是标题简洁、副标题承载度量背景、横向空间受限时将图例放在底部。

高级特性与事件方面,组件可支持:图例驱动的高亮、提示框交互、方向切换、RTL 显示、打印与导出流程、以及事件驱动的筛选或下钻。在 Vue 3 Composition API 中,事件处理函数应声明在 <script setup> 内并在模板中直接绑定。

使用方式

推荐的 Vue 3 实现路径为:使用 Vue 3 单文件组件;使用 <script setup>;从 Syncfusion Vue Charts 包导入 Sankey 组件及所需指令;从 vue 导入 provide;仅注入所需的 Sankey 模块;用稳定的 ID 在节点与连线之间绑定数据;使用固定或自适应的容器高度,保证 SVG 有渲染空间。

官方地址:

  • API 文档:https://ej2.syncfusion.com/vue/documentation/api/sankey/
  • 组件文档:https://ej2.syncfusion.com/vue/documentation/sankey/

资料中提供的安装与导入方式为从 '@syncfusion/ej2-vue-charts' 导入组件与指令,并在 provide('sankey', [...]) 中注入所需模块,未提供其他安装命令。

资料给出的最小示例(Vue 3 Composition API)结构如下,保留原始代码内容:

<template> <div class="container"> <ejs-sankey id="minimal-sankey" width="100%" :height="chartHeight" :tooltip="tooltip" > <e-sankey-nodes> <e-sankey-node id="Source A" :label="{ text: 'Source A' }" /> <e-sankey-node id="Target B" :label="{ text: 'Target B' }" /> </e-sankey-nodes>

  <e-sankey-links>
    <e-sankey-link source-id="Source A" target-id="Target B" :value="100" />
  </e-sankey-links>
</ejs-sankey>

</div> </template>

<script setup> import { provide, ref } from 'vue'; import { SankeyComponent as EjsSankey, SankeyNodesCollectionDirective as ESankeyNodes, SankeyNodeDirective as ESankeyNode, SankeyLinksCollectionDirective as ESankeyLinks, SankeyLinkDirective as ESankeyLink, SankeyTooltip } from '@syncfusion/ej2-vue-charts';

const chartHeight = ref('420px'); const tooltip = ref({ enable: true });

provide('sankey', [SankeyTooltip]); </script>

<style> .container { width: 100%; } </style>

资料还提供了能源流向图的真实场景示例,包含 Solar、Wind、Coal、Generation、Distribution、Consumption 等节点及相关连线,并配置了 title、linkStyle、tooltip、legendSettings,同样通过 provide 注入 SankeyTooltip 与 SankeyLegend 模块。该示例中 linkStyle 使用 opacity: 0.6、curvature: 0.55、colorType: 'Source';legendSettings 使用 visible: true、position: 'Bottom'。

常见模式包括:多阶段流可视化(如 Supplier A → Warehouse → Distribution → Customer)、分流(一个来源分发到多个目标,如 Power Plant 分发到 Residential、Commercial、Industrial)、汇聚(多个来源汇入同一目标,如 Product A、Product B、Service C 汇入 Revenue)、按类别着色(colorType: 'Source')、以及带事件交互(nodeClick、mouseMove 等事件处理函数)的实现。

关键属性参考

SankeyComponent 常用属性包括:width(默认 '100%')、height(默认 '420px')、title、subTitle、linkStyle(SankeyLinkSettingsModel,含 opacity、curvature、colorType)、nodeStyle(SankeyNodeSettingsModel,含 width、padding、fill、stroke)、tooltip(SankeyTooltipSettingsModel)、legendSettings(SankeyLegendSettingsModel)、labelSettings(SankeyLabelSettingsModel)、margin(MarginModel)、orientation('Horizontal' 或 'Vertical')、enableRtl、theme(如 Material、Bootstrap、Tailwind 等)、animation(AnimationModel)。

节点属性:id(必填、唯一)、label(LabelModel,含 text、color、fontSize)、color(节点填充色)、offset(手动垂直位置调整)。

连线属性:sourceId(必填,来源节点 ID)、targetId(必填,目标节点 ID)、value(必填,正数值,表示流量大小)、color(按连线覆盖颜色)。

此外还包含数据模型、15 个以上事件类型及其参数、组件方法(export、print、refresh、setTheme)、枚举类型、子指令及模块注册等,完整列表见资料提到的 api-reference.md。

适用场景

能源生产到消费、供应链流转、预算分配、ETL 管道、网站流量路径等流向型可视化需求。

限制

不适合仅需类别对比、时间序列趋势分析或需要深层级展开的场景。在无障碍方面:需保证足够的颜色对比度,避免仅用颜色传达含义,保持标签有意义,并在图表周围提供标题与上下文说明。在 RTL 方面:仅在应用布局需要时启用,启用后需校验标签可读性与图例布局。

关于该组件的收费、价格、具体支持平台等信息,资料中暂未提供。