【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 创建的图表的示例。

【WPF】 免费图表控件的比较 (OxyPlot,LiveChart,ScottPlot,MsChart)_第1张图片

LiveCharts

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

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

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

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

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

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

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

【WPF】 免费图表控件的比较 (OxyPlot,LiveChart,ScottPlot,MsChart)_第2张图片

ScottPlot

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

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

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

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

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

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

【WPF】 免费图表控件的比较 (OxyPlot,LiveChart,ScottPlot,MsChart)_第3张图片

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一样的快速绘制图表,设计时比其他图表库更令人着迷。

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

【WPF】 免费图表控件的比较 (OxyPlot,LiveChart,ScottPlot,MsChart)_第4张图片

四个图表库的设计比较

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

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

1.OxyPlot

【WPF】 免费图表控件的比较 (OxyPlot,LiveChart,ScottPlot,MsChart)_第5张图片

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

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

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

2.LiveCharts

【WPF】 免费图表控件的比较 (OxyPlot,LiveChart,ScottPlot,MsChart)_第6张图片

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

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

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

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

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

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

也许,他根本不存在吧。

3.ScottPlot

【WPF】 免费图表控件的比较 (OxyPlot,LiveChart,ScottPlot,MsChart)_第7张图片

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

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

4.Microsoft Chart

【WPF】 免费图表控件的比较 (OxyPlot,LiveChart,ScottPlot,MsChart)_第8张图片

与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(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 比较

你可能感兴趣的:(技术之旅,ui)