数据可视化新方式,SankeyDiagramControl类的使用你不能错过!(Part 1)
DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!
命名空间:DevExpress.XtraCharts.Sankey
程序集:DevExpress.XtraCharts.v20.2.UI.dll
声明
C#
[SerializationContext(typeof(SankeySerializationContext))] public class SankeyDiagramControl : Control, ISankeyContainer, IToolTipControlClient, ISupportLookAndFeel, ISankeyRenderProvider, IChartRenderProvider, IPrintable, IBasePrintable
VB.NET
<SerializationContext(GetType(SankeySerializationContext))> Public Class SankeyDiagramControl Inherits Control Implements ISankeyContainer, IToolTipControlClient, ISupportLookAndFeel, ISankeyRenderProvider, IChartRenderProvider, IPrintable, IBasePrintable
注释
Sankey图表描述系统中实体(也称为节点)之间的转移或流,该图可以帮助您找到对流程最重要的贡献。
下图显示了图元素:

每个链接都连接源节点和目标节点,并具有分配的值-权重,链接的宽度与其重量成正比。
添加到项目
将SankeyDiagramControl组件从Toolbox拖放到窗体中,来将Sankey图添加到项目中。

这会将对以下程序集的引用添加到项目中:
- DevExpress.Charts.v20.2.Core.dll
- DevExpress.Data.Desktop.v20.2.dll
- DevExpress.Data.v20.2.dll
- DevExpress.Printing.v20.2.Core.dll
- DevExpress.XtraPrinting.v20.2.dll
- DevExpress.Utils.v20.2.dll
- DevExpress.Utils.v20.2.Core.dll
- DevExpress.XtraBars.v20.2.dll
- DevExpress.XtraCharts.v20.2.dll
- DevExpress.XtraCharts.v20.2.UI.dll
- DevExpress.XtraCharts.v20.2.Wizard.dll
- DevExpress.XtraEditors.v20.2.dll
绑定到数据
使用DataSource属性将控件绑定到数据源,您可以为该属性分配一个实现以下任何接口的对象:IList,IListSource或IBindingList。
然后指定存储用于源节点、目标节点和权重数据的数据成员名称:
- SourceDataMember - 指定包含源节点标签的数据成员的名称。
- TargetDataMember - 指定包含目标节点标签数据成员的名称。
- WeightDataMember (Optional) - 指定包含链接权重的数据成员名称,如果未指定WeightDataMember属性,则权重等于1。
C#
using System; using System.Collections.Generic; using System.Windows.Forms; using DevExpress.XtraCharts.Sankey; namespace SankeySample { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { sankeyDiagramControl1.DataSource = GetSankeyItems(); sankeyDiagramControl1.SourceDataMember = "Source"; sankeyDiagramControl1.TargetDataMember = "Target"; sankeyDiagramControl1.WeightDataMember = "Value"; sankeyDiagramControl1.Titles.Add(new SankeyTitle { Text = "Export/Import" }); } List<SankeyItem> GetSankeyItems() { List<SankeyItem> data = new List<SankeyItem> { new SankeyItem { Source = "France", Target = "UK", Value = 53 }, new SankeyItem { Source = "Australia", Target = "UK", Value = 72 }, new SankeyItem { Source = "France", Target = "Canada", Value = 81 }, new SankeyItem { Source = "China", Target = "Canada", Value = 96 }, new SankeyItem { Source = "UK", Target = "France", Value = 61 }, new SankeyItem { Source = "Canada", Target = "France", Value = 89 }, }; return data; } } public class SankeyItem { public string Source { get; set; } public string Target { get; set; } public double Value { get; set; } } }
VB.NET
Imports System Imports System.Collections.Generic Imports System.Windows.Forms Imports DevExpress.XtraCharts.Sankey Namespace SankeySample Public Partial Class Form1 Inherits Form Public Sub New() InitializeComponent() End Sub Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) sankeyDiagramControl1.DataSource = GetSankeyItems() sankeyDiagramControl1.SourceDataMember = "Source" sankeyDiagramControl1.TargetDataMember = "Target" sankeyDiagramControl1.WeightDataMember = "Value" sankeyDiagramControl1.Titles.Add(New SankeyTitle With { .Text = "Export/Import" }) End Sub Private Function GetSankeyItems() As List(Of SankeyItem) Dim data As List(Of SankeyItem) = New List(Of SankeyItem) From { New SankeyItem With { .Source = "France", .Target = "UK", .Value = 53 }, New SankeyItem With { .Source = "Australia", .Target = "UK", .Value = 72 }, New SankeyItem With { .Source = "France", .Target = "Canada", .Value = 81 }, New SankeyItem With { .Source = "China", .Target = "Canada", .Value = 96 }, New SankeyItem With { .Source = "UK", .Target = "France", .Value = 61 }, New SankeyItem With { .Source = "Canada", .Target = "France", .Value = 89 } } Return data End Function End Class Public Class SankeyItem Public Property Source As String Public Property Target As String Public Property Value As Double End Class End Namespace
结果:

DevExpress技术交流群2:775869749 欢迎一起进群讨论
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2019-11-19 .NET Core 3时代如何转换.NET 4项目,DevExpress Winforms帮你忙!