【WPF】 免费图表控件的比较 (OxyPlot,LiveChart,ScottPlot,MsChart)

indowsForm平台下创建图表、Visual Studio 自带的Chart很有名气、但是在WPF平台下却不支持。

2016年左右,WPT Toolkit组件中提供了(WPF Toolkit Data Visualization Controls),但是现在似乎也已弃用。

在业务中,我需要从数据库或CSV文件中读取数据并创建图表,因此,当我搜索一些看起来是免费的、可用的图表时,我发现了以下四种。

这一次,我想使用一个简单的事例来表明每一个控件的差异。

目录

        OxyPlot

LiveCharts

ScottPlot

MSChart

4四个图表库的设计比较

1.OxyPlot

2.LiveCharts

3.ScottPlot

4.Microsoft Chart

折线图示例比较

OxyPlot折线图示例源

LiveCharts折线图示例源

ScottPlot折线图示例源

Microsoft Chart折线图示例源

你推荐哪一个

总结


OxyPlot

公式サイトOxyPlot
文档Welcome to OxyPlot’s documentation! — OxyPlot 2015.1 documentation
手册https://readthedocs.org/projects/oxyplot/downloads/pdf/latest/
安装Nuget下搜索 “oxyplot”、”OxyPlot.Wpf” 选择安装
相关文章OxyPlotのグラフ描画に関する概要をもっと知りたい方はこちら
コピペで使えるソースコード(関数化したもの)が欲しい方はこちら

官方网站上的信息有点难以理解,许多地方的描述和图表示例不一致。

PDF 手册也已发布,但似乎在 2015 年的旧版本中被忽略。

但是,在“oxyplot”中搜索会命中大量信息,因此,如果您收集这些信息,您就会承受相当大的工作。

WPF,但已成为一个有意识的MVVM,它也可以用于编写C#代码,如Windows窗体。

下面是可以使用 OxyPlot 创建的图表的示例。

LiveCharts

官方网站Live Charts
文档Live Charts
安装Nuget下搜索 “livecharts”、”LiveCharts.Wpf” 选择安装
相关文章LiveCharsのグラフ描画に関する概要をもっと知りたい方はこちら
コピペで使えるソースコード(関数化したもの)が欲しい方はこちら

与 OxyPlot 相比,官方网站上的信息更丰富,可以绘制的图表类型也更丰富。

毕竟,它看起来很漂亮,动画绘制的点也引人注目,但很难说绘制速度太慢。

100 个左右没有问题,但每次在 10,000 个点绘制图形时,每次调整屏幕大小时,您都会等待。

由于您可以选择停止动画,因此绘图速度会提高,但仍会远远落后于其他图表库。

付费的高速版“实时字符齿轮”售价约为7000日元,这里可以毫无问题地绘制1000万点。

下面是可以使用实时图表绘制的图表示例。

ScottPlot

官方网站ScottPlot
文档ScottPlot 4.0.47 Cookbook
安装Nuget下搜索 “scottplot”、”ScottPlot.Wpf” 选择安装
相关文章ScottPlotのグラフ描画に関する概要をもっと知りたい方はこちら
コピペで使えるソースコード(関数化したもの)が欲しい方はこちら

绘制速度与Visual Stuido下的标准Chart一样。

与OxyPlot、 LiveCharts 相比较,ScottPlot更快。

与Visual Stuido标准Chart相比,图表类型更加丰富,且视觉表现上更加漂亮。

官方网站上的手册是实质性的,但是信息不会击中很多,使用者也很少。

即使出现问题,也只有依靠官方网站上的信息来自己解决它,我最喜欢这个。

MSChart

官方网站Chart クラス (System.Windows.Forms.DataVisualization.Charting) | Microsoft Docs
安装Visual Studio自带,不需要安装。
只需应用System.Windows.Forms.DataVisualization 以及 System.Windows.Forms 即可。
相关文章MSChartのグラフ描画に関する概要をもっと知りたい方はこちら
コピペで使えるソースコード(関数化したもの)が欲しい方はこちら

Visual Studio 标准Windows Form 平台下使用的图标控件,WPF平台通过WindowsFormsHost 组件嵌入使用。

Microsoft官方网站有说明,但是并不容易看懂。

与其他图表库比较,这个更加难以理解。

但是,由于WindowsForm平台的信息比较丰富,这就补足了它的不全。

可以创建3D类型的图表,这是其他图表库中没有的功能。并且可以绘制的图标种类繁多。

虽然需要编写一些代码,单支持鼠标放大和缩小,以及像ScottPlot一样的快速绘制图表,设计时比其他图表库更令人着迷。

然而,你可以写一个相当不错的图表,如果你努力工作,所以也许蚂蚁会尝试这个。

四个图表库的设计比较

为了进行比较,我使用每个库绘制了四个图表。

由于散点图的点的初始值是圆形或方形的,隐私他们统一为圆形,除此之外,很少设置属性。隐私你可以看到初始值的设置。

1.OxyPlot

由于饼图的文本颜色为黑色,所以很难看,并且中间的数字可能看起来已消失。

增加图表的大小后,饼图中的所有数字都会显示出来。

我想使饼图字符为白色,但由于无法单独指定饼图中字符和标注字符的颜色,因此,如果将其设置为白色,则标注字符和线条将消失。 是指定饼图的颜色,将文本颜色设置为白色,放弃标注,还是找到可以同时显示两者的图表颜色和文本颜色。

2.LiveCharts

如果指定了任何内容,则绘制的点直径较大。

饼图看起来不错,因为他们是浅色配色方案,由白色分隔。

我担心的是最右边的条形图,其省略了字符。

我找不到显示他的方法,如果没有这样的选项,这是一个麻烦。

由于通过增加绘图区域来显示最后的内容,隐私最好以具有空间的大小进行绘制。

此外,标题不可见,因为找不到标题显示属性。

也许,他根本不存在吧。

3.ScottPlot

这里没有部分被看完,也没有被省略。

尺寸界面显示为薄,因此很容易看到。

4.Microsoft Chart

与ScottPlot一样,没有遗漏。

饼图中的字符与OxyPlot一样为黑色,因此我想将它改为白色。

此外,与ScottPlot相比,深色辅助线颜色太重。

折线图示例比较

我想查看每个库的折线图示例。

通过比较源码,你可以了解图表绘制的概念。

它使用折线图的示例源码来进行方法化,并将绘图数据传递给第一个参数,控件,第二个参数,标题,第三个和第四个参数。

OxyPlot折线图示例源

C#

1
2
3
4
5
6
7
8
9
10
11
12
private void DrawLine(OxyPlot.Wpf.PlotView chart, string title, double[] xs, double[] ys)
{
    PlotModel model = new PlotModel() { Title = title };
    model.Axes.Add(new OxyPlot.Axes.LinearAxis() { Position = AxisPosition.Bottom });
    model.Axes.Add(new OxyPlot.Axes.LinearAxis() { Position = AxisPosition.Left });
 
    LineSeries seri = new LineSeries();
    seri.Points.AddRange(Enumerable.Range(0, ys.Length).Select(i => new DataPoint(xs[i], ys[i])));
    model.Series.Add(seri);
 
    chart.Model = model;
}

对于名为PlotModel的类,你将注册纵轴、横轴以及曲线类、最后将PlotModel设置为控件的Model属性。

Axis、Series、数据类(折线图使用DataPoint)必须使用每种图表类型提供的数据类。

LiveCharts折线图示例源

C#

1
2
3
4
5
6
7
8
private void DrawLine(CartesianChart chart, string title, double[] xs, double[] ys)
{
    chart.Series.Clear();
    
    LineSeries seri = new LineSeries();
    seri.Values = new ChartValues<ObservablePoint>(Enumerable.Range(0, ys.Length).Select(i => new ObservablePoint(xs[i], ys[i])));
    chart.Series.Add(seri);
}

在为每种图表类型准备的Series类中,通过创建绘图数据并最后在控件的Series属性中添加图表来显示图表。

这里可以省略Axis类。但是Series和绘图数据必须存储在根据图表类型确定的类中。

ScottPlot折线图示例源

C#

1
2
3
4
5
6
7
8
private void DrawLine(WpfPlot chart, string title, double[] xs,double[] ys)
{
    chart.plt.Clear();
    chart.plt.Title(title);
    chart.plt.PlotSignalXY(xs,ys);
    chart.Render();
 
}

通过在控件的plt属性中注册标题和绘图数据,最后调用控件的Render方法来显示图表。

与其他库相比,它非常简单。

创建绘图数据的方法必须使用每种图表类型提供的方法。

Microsoft Chart折线图示例源

C#

1
2
3
4
5
6
7
8
9
10
11
12
13
private void DrawLine(Chart chart, string title, double[] xs, double[] ys)
{
    chart.Titles.Clear();
    chart.ChartAreas.Clear();
    chart.Series.Clear();
 
    chart.ChartAreas.Add(new ChartArea());
    Series seri = new Series() { ChartType = SeriesChartType.Line };
    Enumerable.Range(0, ys.Length).Select(i => seri.Points.AddXY(xs[i], ys[i])).ToArray();
 
    chart.Titles.Add(title);
    chart.Series.Add(seri);
}

这需要将ChartArea类的实例添加到ChartAreas属性里,以便图表绘制。

与其他库不同,只有一个Series类可以保存绘图数据。

相反,在生成Series类的实例时,将图表类型设置为ChartType。

之后,在系列类中注册绘图数据与其他库相同。。

但是,尽管其他库存储没中图表类型的绘图数据的类不同,但对于Microsoft Chart图表,无论图表类型如何,AddXY方法足可。

这是因为AddXY方法的第一个参数是Object类型,可以接受实数和字符串,但内部似乎根据ChartType进行了适当的转换。

你推荐哪一个

我根据以前的调查制作了比较表如下。

库名称安装好看速度手册等专有技术文章
OxyPlot必要
LiveCharts必要×
ScottPlot必要×
Microsoft Chart不要×

如果以绘制大量数据的速度为准,则Microsoft Chart、ScattPlot最好。

如果为了绘图方便,则ScattPlot是最佳选择。

如果你想专注于设计或制作动画,LiveCharts是个不错的选择。

如果你想实现一个类似EXCEL的3D图表的东西,那就只能用Microsoft Chart。

OxyPlot是ScottPlot和LiveCharts的中间存在么・・・

总结

作为WPF中使用的免费图表库,我们比较了四种类型的图表: OxyPlot、LiveCharts、ScottPlot、Microsoft Chart。我使用我自己的印象、实际绘制结果与源代码进行比较。

哪一个更好取决与您的用途,因此请参阅本文以查找适合您的用途的图表库。

原文如下

OxyPlot,LiveChart,ScottPlot,MsChart 比较

之前三此发的库http://download.csdn.net/detail/maiker/9621027可以作废,本次为最新的,其中测试了历史曲线的动态显示,这是对Microsoft WpfToolkit的更新和扩展: 1、将库版本升级到.NET 4.6.1,对命名控件进行了替换处理 2、实现了单数据Chart图的混合颜色显示,可通过修改资源字典调整和添加颜色 3、可控制各种Chart图形的数据值显示 4、坐标轴文本可倾斜显示 5、添加了StepLine图和圆环图,圆环半径比例系数可设定,同时添加了饼图的半径比系数,这样可以更好的控制饼图的标签显示,避免重叠 6、Legend可位于区域四侧,对齐方式也可以设定,以及是否显示, 可控制Chart Title是否显示 7、柱状图缝隙间隔可调整 8、全方面的加入了各种加载动画效果,动画效果可屏蔽,同时原系统自带动画效果,可叠加,这是两种不同的效果,可以互补性的单个使用 9、设计了四种主题颜色,各人可以针对图形颜色和背景色进行更好的搭配,在用户项目中,可以自己添加新的主题。 10、扩展了时间轴的应用,在新的DateTimeChart中可以通过鼠标平移和缩放时间轴,并测试了两个例子用于动态显示历史曲线,一个是外部定时更新,一个是内部定时更新 11、对LineDataPoint样式进行了设计,现在可以选择线图的点样式(如空心圆、五角星、三角形,矩形等),同时这些不同的点样式可以体现在Legend上,从而实现颜色和图形的双重区分。 总而言之,微软的控件库做得很标准,还是很好修改的。 最后一直想在历史曲线中取消点动画(及默认的透明度动画),以便提高执行效率,但微软的那部分动画不熟,总是修改失败。 可以发邮件wuyang26@live.cn讨论。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值