.NET 开源免费图表组件库,Winform,WPF 通用

9e9cbadcc27cb3ac1f25223d4ed6c8c9.png

大家好, 我是等天黑, 今天给大家介绍一个功能完善, 性能强悍的图表组件库 ScottPlot, 当我第一次在 github 上看到这个库, 我看不懂,但我大受震撼, 这么好的项目当然要分享出来了。

https://github.com/ScottPlot/ScottPlot

ScottPlot 是一个 .NET 图表组件, 主要有以下特点:

•适用范围广:同时适用于 WinForms, WPF, Avalonia, Console, 支持 .NET Framework 4.6.1 及以上, NET Core 2.0 至 .NET 5。•上手简单:只需几行代码即可创建折线图、条形图、饼图、散点图等。•性能强悍:千万级数据处理无压力, 媲美 Python Matplotlib。•可交互:支持用户和图表数据进行交互, 注入灵魂。•开源免费:基于MIT开源协议, 已经开源近5年, 不存在版权和收费问题•组件丰富:图表组件非常全面,可满足各种场景下的展示需求。

cce956a79110681f1ca7847f196da407.gif

图表接入

⚡ Winform

1.通过Nuget安装 ScottPlot.WinForms。2.安装完成后, 就可以在工具箱找到 ScottPlot 组件, 然后拖到 Winform 窗体上。3.填充图表数据, 完成!

double[] dataX = new double[] {1, 2, 3, 4, 5};double[] dataY = new double[] {1, 4, 9, 16, 25};formsPlot1.Plot.AddScatter(dataX, dataY);formsPlot1.Refresh();
566436c2c7aaf7d402031cb855389c69.png

⚡ WPF

1.通过Nuget安装 ScottPlot.WPF2.添加一个 WpfPlot 组件到布局中, 并设置Name

<WpfPlot Name="WpfPlot1" />


3.同样, 填充图表数据, 完成!

double[] dataX = new double[] { 1, 2, 3, 4, 5 };double[] dataY = new double[] { 1, 4, 9, 16, 25 };WpfPlot1.Plot.AddScatter(dataX, dataY);WpfPlot1.Refresh();
7ad97e0915ed0a84a676403c023f8064.png

⚡ Console App

当然也可以在控制台应用中使用该图表组件, 和上面不同的是, 它会渲染成一张图片, 然后可以保存到本地

1.通过Nuget安装 ScottPlot2.填充图表数据并保存为图片

be2ddc7896164a498b0322025bf437d2.png

图表示例

b3f130c6d4b75381732d28b5c9a1eae7.pngc0ef66100cdbb69cef03e7d166f99be3.pngd72d691ca6cf31ec643558659115fa76.png8f7e9cf3973d1d824e13834fc0785855.gif

项目背后的故事

wow, 很优秀的开源项目, 但其实我还想分享一些项目背后的故事, 因为这非常有意义!

ScottPlot 图表库 的作者是 Scott W Harden, 他是一名生物研究科学家, 目前在神经科学实验室工作, 他的主要专业是分子生物学、牙科和神经科学, 但是也对计算机编程和电气工程充满热情, 所以偶尔会编写代码来完成与科学研究相关的任务。

2f0378ef1ede38bdee6940b45add174a.png

像很多科学家一样, Scott 也使用 Python 流行的的 matplotlib 处理数据, 但是发现在给一些不太懂计算机的用户安装软件时, 总会出现一些环境问题, 配置问题等等, 所以他在2017年做了个决定, 学习.NET 技术栈, 主要用来开发用于科学研究的桌面应用程序。

但是问题来了, 当他尝试用 C# 绘制 WAV 文件中的数据时,发现非常困难, Python 中的微不足道的任务在 C# 中似乎非常困难, 虽然有免费的图表库, 但是当加载了千万级的数据时就开始有各种问题了,有一些商业图表库好像可以用,但既复杂又昂贵, 有些库仅适用于 Winforms,有些仅适用于 WPF,而且许多库具有复杂的数据对象模型,对于 .NET 新手来说非常难以理解, 于是作者就自己实现了图表组件, 这就是 ScottPlot 初版, 然后就开源在了github, 经过几年的逐步更新迭代, ScottPlot 变成了一个功能丰富, 成熟稳定的图表组件库。

另外, 作者在 2012 年被诊断出患有癌症(外周 T 细胞淋巴瘤), 然后在2018年开始接受治疗,包括化疗、放疗和自体骨髓移植, 好消息是, 整个手术的过程还算顺利。

1438786b6a1f83b8770f0daf3ac752cc.png

截至到目前, 作者仍然保持着很好的状态, 感谢作者带来如此强大的图表组件, 最后也祝愿作者能够越来越好, ScottPlot 也能越来越好!

https://github.com/ScottPlot/ScottPlot

https://swharden.com/


a18d2437b22dd175e89e206db9c5937a.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295055.shtml

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

相关文章

物理学上最厉害的54个男人!2400年来难以超越,没想到聚在一起后这么震撼......

全世界只有3.14 % 的人关注了爆炸吧知识19世纪的最后一天电子的发现者汤姆生发表了新年祝词&#xff1a;“晴朗的天空远处&#xff0c;有两朵令人不安的乌云令物理学的优美性和明晰性黯然失色”也似乎就是从这一天开始经典力学的地位被撼动了原子的大门打开了这场微观世界的探险…

linux主线程结束 子线程还能运行么,linux主线程和子线程

"读了三遍&#xff0c;愣是没读懂楼主想说啥。######java_zf 我现在在做的一个项目用到了多线程&#xff0c;我就在项目中子线程调用的一个函数中加了个sleep。你可以写个简单的代码试一下&#xff0c;应该比较简单。你试验的结果不一样吗&#xff1f;我这个项目是Linux下…

Android插件化开发基础之Java反射机制研究

一、获得Class对象 Class<?> c Class.forName("classname"); 抛出ClassNotFoundException 二、获得实现接口 Class<?> inters[] c.getInterfaces(); for(int i0;i<inters.length;i){System.out.print(inters[i].getName()" "); …

[MySQL]关于amd.dll后门病毒入侵3306端口的临时解决方案

为什么80%的码农都做不了架构师&#xff1f;>>> amd.dll入侵事宜&#xff1a; 由于MySQL 5.1.30以上版本的一个漏洞&#xff08;当然是不是因为漏洞的原因&#xff0c;目前暂未知&#xff09;&#xff0c;导致一个后门程序会通过3306端口的MySQL服务获取到Windows…

微软将终止免费的条码标签服务

本文转自&#xff1a;慧都控件网 http://***/zh-CN/info/catalog/19420.html 在纽约时间2013年8月19号&#xff0c;Scanbuy——这个手机软件巨头&#xff0c;手机移动设备的条形码解决方案提供商&#xff0c;被微软选中成为微软条码标签的授权使用者。在购买了微软条码标签技术…

Spring Security3源码分析-http标签解析(转)

为什么80%的码农都做不了架构师&#xff1f;>>> 在FilterChainProxy初始化的过程中&#xff0c;大概描述了标签解析的一些步骤&#xff0c;但不够详细 <http auto-config"true"> <remember-me key"workweb" token-validity-se…

Android之React Native 中组件的生命周期

React Native 中组件的生命周期 概述 就像 Android 开发中的 View 一样&#xff0c;React Native&#xff08;RN&#xff09; 中的组件也有生命周期&#xff08;Lifecycle&#xff09;。所谓生命周期&#xff0c;就是一个对象从开始生成到最后消亡所经历的状态&#xff0c;理解…

当女朋友学会「监视」男朋友......

1 日本网友拍到两只水母互殴&#xff01;▼2 打印机也会生气&#xff1f;&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 现在你们可以互换卡槽了~&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼4 有什么适合整蛊朋友的恶作剧▼5 哈哈哈哈哈&#xff…

使用.NET5、Blazor和Electron.NET构建跨平台桌面应用

Electron.NET是一个嵌入了ASP.NET Core的Electron的封装&#xff0c;通过Electron.NET可以构建基于.NET5的跨平台的桌面应用&#xff0c;使得开发人员只需要使用ASP.NET Core和 Blazor就可以胜任桌面应用的开发工作。开发环境操作系统Windows/macOS/Linux.NET5.0npm创建新项目创…

蜗蜗 Linux内核芬妮下,201402 - 蜗窝科技

作者&#xff1a;wowo 发布于&#xff1a;2014-2-27 17:01分类&#xff1a;统一设备模型在“Linux内核的整体架构”中&#xff0c;蜗蜗有提到&#xff0c;由于Linux支持世界上几乎所有的、不同功能的硬件设备(这是Linux的优点)&#xff0c;导致Linux内核中有一半的代码是设备驱…

linux内核分析作业3:跟踪分析Linux内核的启动过程

内核源码目录 1、 arch:录下x86重点关注 2、 init&#xff1a;目录下main.c中的start_kernel是启动内核的起点 3、 ipc&#xff1a;进程间通信的目录 实验 使用实验楼的虚拟机打开shell cd LinuxKernel/ qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img 使…

图表中各个参数的应用( AChartEngine XMultipleSeriesRenderer

图表中各个参数的应用&#xff08; AChartEngine XMultipleSeriesRenderer 运行demo可以发现&#xff0c;它的所有chart都是可以移动&#xff0c;背景色为黑。。。。不过我们有时候会希望chart不动或者改变背景色等一些样式。 这节就介绍一些demo中没有使用的但有很常见的一些关…

用正则匹配多行文本

如果有这样一个字符串 $var "src arr.c build.c eval.c field.c \ missing.c msg.c re.c version.c" 用一般的^\w\s*\s*.*$只能匹配上面的那句&#xff0c;而下面的那一句就无法匹配了 方法一&#xff1a;使用的是perl $var "src arr.c build.c eval.c fiel…

Android之用HttpURLConnection参数以XML形式封装的部分关键代码

HttpURLConnection参数以XML形式封装 //得到连接public static HttpURLConnection setRequest(String urlStr) {HttpURLConnection con = null;try {URL url = new URL(urlStr);try {con = (HttpURLConnection) url.openConnection();con.setDoOutput(true);con.setDoInput(tru…

linux安装定制添加输入,Arch Linux--定制自己的Linux操作系統(乙-國際化桌面安裝篇)...

Arch Linux&#xff0d;&#xff0d;定制自己的Linux操作系統&#xff0d;&#xff0d;&#xff0d;&#xff0d;乙&#xff0d;國際化&桌面安裝篇相信大家看了《甲-安裝篇》之後&#xff0c;Arch Linux系統已經可以正常運行了吧&#xff1f;不過&#xff0c;Arch Linux默認…

ToLookup 和 GroupBy 到底有什么不同?

咨询区 Shlomo&#xff1a;.ToLookup<TSource, TKey> 返回的是 ILookup<TKey, TSource>, 但我发现 ILookup<TKey, TSource> 同时也实现了 IEnumerable<IGrouping<TKey, TSource>> 接口。.GroupBy<TSource, TKey> 直接返回的是 IEnumerabl…

这几部经典纪录片,竟然还有人没看过?

全世界只有3.14 % 的人关注了爆炸吧知识看纪录片&#xff0c;既可以追溯上下数千年的历史文化&#xff0c;也可以欣赏从宇宙到地心深处的奇妙境界&#xff0c;而及其超级精彩的画面即使定格&#xff0c;也是一幅摄影佳作。纪录片题材广泛、制作精良&#xff0c;观看起来算的上是…

Android之获取屏幕和视图高和宽

在android中&#xff0c;画布Canvas的高宽其实是屏幕的高宽。 1. WindowManager windowManager getWindowManager(); Display display windowManager.getDefaultDisplay(); screenWidth display.getWidth(); screenHeight display.getHeight(); 2DisplayMetrics d…

Html5 Video 节点

1、支持的视频格式 当前&#xff0c;video 元素支持三种视频格式&#xff1a;格式 IE Firefox Opera Chrome Safari Ogg No 3.5 10.5 5.0 No MPEG4 9.0 No No 5.0 3.0 WebM No 4.0 10.6 6.0 NoO…

github 上微信判断是否被删除的源码 以及使用解惑

为什么80%的码农都做不了架构师&#xff1f;>>> 从Github上的https://github.com/0x5e/wechat-deleted-friends&#xff0d;&#xff0d;clone出来的代码 今天在我的机器上不能运行了&#xff0c;环境为Mac 10.10 python2.7.10中 提示错误&#xff0c; Traceback (…