【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://www.rhkb.cn/news/58707.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

甘特图控件DHTMLX Gantt教程:用PHP:Laravel实现Gantt(上)

DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的大部分开发需求&#xff0c;具备完善的甘特图图表库&#xff0c;功能强大&#xff0c;价格便宜&#xff0c;提供丰富而灵活的JavaScript API接口&#xff0c;与各种服务器端技术&am…

C# Winform酒店管理系统根据数据库动态加载房间生成房态图的制作效果(附图且详细)

酒店管理系统根据数据库动态加载房间生成房态图的制作 先放一张效果图&#xff1a; 因为要动态加载房态图&#xff0c;需要遍历每一个小房间&#xff0c;所以我定义了一个自定义控件&#xff0c;大概是这个样子的&#xff0c; 首先创建一个自定义控件&#xff0c;然后我们来…

MFC 关于OnPaint绘图的一些经验

问题描述&#xff1a; 在MFC中在对话框上绘图时&#xff0c; 要求按下按钮绘制相关图形&#xff0c; 写好绘制函数调用调试时&#xff0c;发现若是改变对话框的界面大小或者最小化/最大化或者有隐藏时会导致图形消失。 原因分析&#xff1a; 改变对话框的界面大小或者最小化…

聊一聊过度设计!

文章目录 什么是过度设计&#xff1f;过度设计的坏处如何避免过度设计充分理解问题本身保持简单小步快跑征求其他人的意见 总结 新手程序员在做设计时&#xff0c;因为缺乏经验&#xff0c;很容易写出欠设计的代码&#xff0c;但有一些经验的程序员&#xff0c;尤其是在刚学习过…

毕业5年了还不知道Android热修复?

/ 今日科技快讯 / 近日&#xff0c;谷歌抢在微软之前发布了ChatGPT竞品、自家人工智能聊天机器人Bard&#xff0c;但市场反应并不好。谷歌员工们纷纷批评包括首席执行官桑德尔皮查伊在内的公司领导层&#xff0c;认为公司本周宣布推出Bard的方式过于“仓促”、简直是“一团…

输出国际象棋棋盘

##1、程序分析 国际象棋是8*8的&#xff0c;i(07)代表行&#xff0c;j(07)代表列。当ij为奇数的时候&#xff0c;是黑色格子&#xff0c;反之&#xff0c;白色格子。 ##2、程序实现 方法一&#xff1a;两重循环 &#xff08;1&#xff09;程序&#xff1a; for i in range(8…

java简单实现中国象棋

java简单实现中国象棋 可以实现简单的人机对战功能&#xff0c;棋子移动会插入关键帧&#xff0c;可以悔棋等功能 运行效果 import java.awt.Canvas; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.event.ActionEvent; import ja…

Qt实现中国象棋:(七)悔棋

一、下棋步骤的保存 在设置保存下棋步骤之前&#xff0c;先定义一个bool类型的变量player用于判定是哪一方下子&#xff0c;设定playertrue时是红方下棋&#xff0c;playerfalse时是黑方下棋。 1:要想保存下棋的步骤&#xff0c;必须先弄明白需要保存的信息。一个下棋步骤需要…

三种版本的中国象棋

一.图片资源&#xff1a; 二.图片存放位置&#xff1a; 三.三种不同版本的中国象棋源代码 三种源代码运行之前都需要 点击项目-属性 找到这个地方&#xff0c;把字符集改成“使用多字节字符集”&#xff1a; 一.版本1&#xff1a;中国象棋简洁版&#xff08;部分特效无…

Pygame实战:中国象棋人机对抗赛今开战、谁占上风?要不要来一盘试试?

&#x1f333;导语 哈喽&#xff01;哈喽&#xff01;我是木木子&#xff01;今日游戏更新——中国象棋上线啦&#xff01; 中国象棋是一种古老的棋类游戏&#xff0c;大约有两千年的历史。 是中华文明非物质文化经典产物&#xff0c;艺术价值泛属于整个人类文明进化史的一个…

Java实现中国象棋(人机对战)

目录 简介 成品视频 实现思路 界面实现分为了三块 棋盘抽象类 按钮组抽象类 棋子绘制接口 棋盘界面实现 棋子的实现 按钮组的实现 监听工厂和监听类 棋盘绘制类的实现 开始游戏实现 停止游戏实现 游戏抽象类 游戏实现类 可走路线和吃棋判断实现 车(ju) 炮 …

Java国际象棋 棋子的走法和吃法

------ Oracle中文开发者社区 ------ 如果你想要学习编程,关注本博客,持续获得技术支持,持续获得技术咨询 java开发企业官方账号 Oracle中国官方账号 Java中国管理部 全网粉丝30万 华为云享专家 阿里专家博主 CSDN内容合伙人 CSDN原力计划作者 51CTO专家博主 CSDN博客V账号 …

Java 中国象棋

实现一个小游戏需要知道从哪里下手&#xff0c;一步步实现和完善&#xff0c;对于一个中国象棋的小游戏&#xff0c;我们可以按这样的顺序展开&#xff1a; 界面按钮加棋子实现棋子的移动判断胜负按钮“开始游戏”和“重新开始”的实现加规则轮次悔棋背景 及 提示 一、界面 …

简单的象棋开发

我们需要准备的知识是c语言基础和easyx图形: easyx官网&#xff1a; https://easyx.cn/ 首先头文件少不了: #include<stdio.h>(c语言的头文件) #include<graphics.h>&#xff08;easyx的&#xff09; #include<mmsystem.h>&#xff08;音乐播放的&#x…

中国象棋C++实现

使用C语言开发中国象棋的小游戏 Chess.cpp // includes #include<iostream> #include<graphics.h> using namespace std;// 使用到的 WCHAR 字符 class CKind{ public:WCHAR ROOKS *(_T("车"));WCHAR KNIGHTS *_T("马");WCHAR ELEPHANTS …

用C++实现中国象棋

项目介绍 最近学习到了STL库&#xff0c;了解到一些很实用的容器&#xff0c;同时我也是个象棋爱好者&#xff0c;想着能不能做个象棋的游戏小程序出来&#xff0c;运用一下所学到的知识点&#xff0c;于是动手做了这个项目&#xff0c;花了两天左右的时间基本完成&#xff0c;…

C++中国象棋

ssdut c的大作业&#xff0c;在控制台的界面实现人人对弈&#xff0c;比较适合初学&#xff0c;自己设计了一些简单算法&#xff0c;两百多行完成。 以下正文&#xff1a; 完成中国象棋游戏&#xff0c;实现如下功能&#xff1a; 1.实现人与人之间象棋的对弈。 2.每次走子之…

Java版本实现中国象棋

预览效果 中国象棋 游戏介绍&#xff1a;中国象棋是起源于中国的一种棋&#xff0c;属于二人对抗性游戏的一种&#xff0c;在中国有着悠久的历史&#xff0c;由于用具简单&#xff0c;趣味性强&#xff0c;成为流行极为广泛的棋艺活动。阿巴阿巴阿巴 代码结构&#xff1a;Butto…

数影周报:小米汽车供应商被罚100万,1688延迟下线“1688买家旺旺”

本周看点&#xff1a;小米汽车供应商被罚100万&#xff1b;特斯拉将在硅谷招聘AI 人才&#xff1b;阳光出行等25款 App涉违规收集使用个人信息等&#xff1b;1688延迟于2月8日下线“1688买家旺旺”&#xff1b;微蚁科技完成数千万元B轮融资...... 数据安全那些事 小米汽车供应商…

Coggle 30 Days of ML (23年7月)任务二:数据可视化

Coggle 30 Days of ML (23年7月&#xff09;任务二&#xff1a;数据可视化 任务二&#xff1a;对数据集字符进行可视化&#xff0c;统计标签和字符分布 说明&#xff1a;在这个任务中&#xff0c;需要使用Pandas库对数据集的字符进行可视化&#xff0c;并统计数据集中的标签和…