C# WPF 各种Chart图表控件总结对比

01—前言

客户为表达对我司 LightningChart 图表控件的喜爱及对我司提供协助表示感谢,特将研究使用 WPF 数据可视化图表控件产品时的一些经历与我们分享,如下将以第一人称转述。.

大家好:

因为项目需求,需要基于Chart控件制作一个示波器,用于显示信号的实时波形图。

网上基于WPF开发的Chart控件还是有蛮多的,于是我上网查找了几款不错的Chart控件:ComponentOne、Live Charts、DevExpress以及LightningChart。,对它们进行简单地了解和学习,由于时间有限,所以掌握得不是那么全面,但是对于公司控件的选型基本可以用作参考和判断。

控件的选择主要基于以下几点:
a. 效率;

b. 学习成本;

c. 功能丰富性;

效率对于实时显示数据是至关重要的。示波器用于实时显示数据,如果数据量不是特别大的话,相信很多Chart控件基本都能够满足这个需求。当然针对不同的项目可能情况不同,所以需要展示的数据量也会存在差别。但是事实上,这样的实时数据的数据量往往是很大的,并且有可能需要显示多条通道 Channel的信号波形图。Chart处理和渲染波形图的效率较低,是很难做到实时显示的。为什么?因为Chart控件无法渲染大量数据,这时为了使程序保持相对流畅地运行,只能通过一些手段和方法来限制数据量,如果数据量太大,即使在显示的范围内做了采样算法,丢弃了一部分数据,还是会在程序里堆积很 多数据等待渲染。由于数据的大量堆积,波形的显示在时间上会较滞后,也就是无法做到实时显示。对于数据点的渲染,一般有两种方式,通过CPU渲染和通过 GPU渲染,显然CPU的并行运算和GPU相比是相形见绌的,所以GPU渲染要比CPU渲染效率高很多。

学习使用一个控件,最理想的是该控件具有足够的资料、文档和使用实例。这样学习效率才会得到成倍的提高,学习成本才会减低。如果投入了大量时间,还是不知道怎么使用那个控件,那么即使那个控件做得再好,也只是一堆无用的代码而已。简单来说,相比几个控件,哪个能够满足我需求的同时,还具有完备的文档和资料,我就会选择哪个。

需求是多样性的,同时也是在不断变化的。因此符合这种需求变化的多样性,要么把控件设计得比较灵活,可以任意调整和修改,但是这种情况一般比较少见,一般属于开源,并且要求比较高。还有一种是,控件把别人能够想到的,甚至没有想到的功能基本都实现了,我想很多控件都是这样的,这就要求控件的功能足够丰富。

02—使用的几款控件比对分析

C1Chart
官网地址:https://www.grapecity.com.cn/developer/componentone-wpf

文档:http://help.grapecity.com.cn/pages/viewpage.action?pageId=3871181

这是通过CPU进行数据点的渲染,效率一般。如果数据量太大,可以使用它的位图模式,在该模式下,波形显示的效率会得到很大改善,但是还是需要在控件之外做一些额外的并行处理操作,增加了程序的开发难度。

它的文档,我已无力吐槽,Chart简单的功能应用,是有简单的示例和说明文档。但是如果想做一些额外的创新和定制,这些文档显然没有半点用处,可能商业模式的选择不同造成的吧。不得不说,在试用期期间,要做demo来评估控件期间,这些文档可以不客气地说,写得很烂。

对于功能的丰富性,举个简单的例子。它的多Y轴功能显得有些单一,如果添加显示的波形比较多,而且每条波形需要对应一个Y轴,那么Y轴区间就会压缩Chart的波形显示空间。这种情况也可能我没找到相应的功能属性来进行设置,但也从一方面说明了资料文档写得真的烂。

LiveCharts
官网地址:https://lvcharts.net/

Simple, flexible, interactive & powerful data visualization for .Net LiveCharts is just data visualization but built and for everyone. 这是它官网的介绍和说明。

它是一个开源的项目,有两部分组成,控件的使用部分是免费的,数据采样算法是需要收费的。控件使用比较简单,也有充足的示例,并且文档资料写得不错,当然还有源码可以看。

对于效率,它是通过画布Canvas来进行绘制波形的,通过CPU运行和渲染,经过demo测试,在画布同时渲染2000个点较为流畅,再多就会有 所卡顿,当然这个数值跟PC的配置有关系。但是基于所有的控件,在同一PC来测试效率,也可以初略地评估各个控件渲染效率的高低。加入采样算法,根据官方 说法可以流畅地渲染30万(30,000)个点。我把官方的示例运行起来,在渲染的过程中,有少许卡顿,不过可以忽略。对于这个采样算法,由于时间有限, 我没有做实时数据显示的验证,所以不做过多叙述。总的来说,是一款不错的控件,界面相对也比较美观,可定制性也很高。但是对于效率要求较高的情 况,LiveCharts还是有些令人担忧。

DevExpress
DevExpress 对于这个控件,没有过多认识。只是下载了官网提供的示例,然后运行了它的实时显示的示例,对于CPU占用率比较高,在本机运行该示例进程CPU占用率高达40%。于是就没有继续了解下去,就果断放弃了选择。

LightningChart 图表控件
官网地址:http://arction.cn/

文档资料:http://arction.cn/resources

中文论坛:http://forum.jianshukeji.com/forum.php

LightningChart是目前为止,我所了解的多个wpf的Chart控件里,唯一使用GPU渲染的。渲染效率而言,秒杀一切wpf的Chart控件。所以即使它在渲染数十万个点,甚至上百万个点也依然很流畅。因为使用GPU渲染,所以CPU的占用相对也低。在编写程序时,由于LightningChart的高效性,所以我在控件之外,不需要做太多额外的处理,极大地降低了程序的实现难度,同时也极大地提高了程序的实现速度。渲染效率的高效性很好地保证了实时数据的实时性。它提供的文档中英文版本都有,小缺点可能就是文档不是最新的,但在试用期间提供免费中文技术支持服务(请通过中文论坛联系),为开发遇到疑问、语言转换节省了不少时间。LightningChart的功能比较丰富,使用也比较简单,并且示例也很丰富,一般参考示例基本能够满足绝大多数功能的实现。

结论
综上所述,基于效率优先、易用性和丰富性的考虑,优先选择LightningChart,不得不再次说,它的效率秒杀一切WPF的chart控件。

因时间与篇幅长度原因,暂未一一写下去,感谢各位的阅读,希望能对各位的选择WPF chart 控件有所帮助。