使用ScottPlot库在.NET WinForms中快速实现大型数据集的交互式显示

25a8d37d9a9c2c092447b4e12cca0eb7.png

bd7800c408b91660741f5eb3071b06e4.jpeg

前言

在.NET应用开发中数据集的交互式显示是一个非常常见的功能,如需要创建折线图、柱状图、饼图、散点图等不同类型的图表将数据呈现出来,帮助人们更好地理解数据、发现规律,并支持决策和沟通。本文我们将一起来学习一下如何使用ScottPlot库在.NET WinForms中快速实现大型数据集的交互式显示。

ScottPlot类库介绍

ScottPlot是一个免费、开源(采用MIT许可证)的强大.NET交互式绘图库,能够轻松地实现大型数据集的交互式显示。使用几行代码即可快速创建折线图、柱状图、饼图、散点图等不同类型的图表。

ScottPlot类库支持平台和框架

Console Application、WinForms、WPF、Avalonia、Blazor、WinUI等多个平台和框架。

ScottPlot类库源代码

c5b2fc56bdf8afb0605db5447a1271a2.png

新建WinForms项目

新建一个名为ScottPlotWinFormsExercise的项目。

d63ed10e4a05fb66b8282a793ce157e7.png 80580af6450685586113a4db1d99f9d6.png e2a5cbd5a2072b23f67ce201c5a43572.png a6ea498792ec22797e6c94e6e1b3493c.png

安装ScottPlot.WinForms包

搜索ScottPlot.WinForms包安装:

5b03a4742b10af8635b01d2973dcd7a1.png

折线图实现

创建名为:LineChart窗体。7975fdb950f0bfffdb516b04129ccca0.png

69eb9425899fb46170b1205a21a7ce4d.png

FormsPlot (ScottPlot.WinForms)从工具箱拖到窗体中:

0a9308edefdc00493dd442e67f42430d.png

输入以下代码:

public partial class LineChart : Form
    {
        public LineChart()
        {
            double[] dataX = GetRandomNum(20).Distinct().OrderByDescending(x => x).ToArray();
            double[] dataY = GetRandomNum(19).Distinct().OrderByDescending(x => x).ToArray();
            formsPlot1.Plot.Add.Scatter(dataX, dataY);
            formsPlot1.Refresh();
        }

        public double[] GetRandomNum(int length)
        {
            double[] getDate = new double[length];
            Random random = new Random(); //创建一个Random实例
            for (int i = 0; i < length; i++)
            {
                getDate[i] = random.Next(1, 100); //使用同一个Random实例生成随机数
            }
            return getDate;
        }
    }

运行效果展示:

56b3a3b0ad47afa2a3e49456b7afed95.png

柱状图实现

创建名为:BarChart窗体。ca5b9628fa484bfd20565be58103baa2.png

FormsPlot (ScottPlot.WinForms)从工具箱拖到窗体中:

6994d3a2746c47fbc9d49a901333df35.png

输入以下代码:

public partial class BarChart : Form
    {
        public BarChart()
        {
            double[] values = { 5, 10, 7, 13, 22, 18, 33, 16 };
            formsPlot1.Plot.Add.Bars(values);
            formsPlot1.Refresh();
        }
    }

运行效果展示:

c5eae9d96d90447ce1feabd33ce2c586.png

饼图实现

创建名为:PieChart窗体。424c38b25de32bec6062e7683deb4136.png

FormsPlot (ScottPlot.WinForms)从工具箱拖到窗体中:

2d77ebd945737cdfbaf28d2e95784aec.png

输入以下代码:

public partial class PieChart : Form
    {
        public PieChart()
        {
            double[] values = { 3, 2, 8, 4, 8, 10 };
            formsPlot1.Plot.Add.Pie(values);
            formsPlot1.Refresh();
        }
    }

运行效果展示:

5d2938bf6c48a50b20addc976dddf80c.png

散点图实现

创建名为:ScatterChart窗体。e0f15b7f0bccded14c7b9d15afd30cf6.png

FormsPlot (ScottPlot.WinForms)从工具箱拖到窗体中:

340086399eb20b7bfb3e56cb048f9204.png

输入以下代码:

public partial class ScatterChart : Form
    {
        public ScatterChart()
        {
            //从原始数据开始
            double[] xs = Generate.Consecutive(100);
            double[] ys = Generate.NoisyExponential(100);

            //对数据进行对数缩放,并处理负值
            double[] logYs = ys.Select(Math.Log10).ToArray();

            //将对数缩放的数据添加到绘图中
            var sp = formsPlot1.Plot.Add.Scatter(xs, logYs);
            sp.LineWidth = 0;

            //创建一个次要刻度生成器,用于放置对数分布的次要刻度
            ScottPlot.TickGenerators.LogMinorTickGenerator minorTickGen = new();

            //创建一个数值刻度生成器,使用自定义的次要刻度生成器
            ScottPlot.TickGenerators.NumericAutomatic tickGen = new();
            tickGen.MinorTickGenerator = minorTickGen;

            //创建一个自定义刻度格式化程序,用于设置每个刻度的标签文本
            static string LogTickLabelFormatter(double y) => $"{Math.Pow(10, y):N0}";

            //告诉我们的主要刻度生成器仅显示整数的主要刻度
            tickGen.IntegerTicksOnly = true;

            //告诉我们的自定义刻度生成器使用新的标签格式化程序
            tickGen.LabelFormatter = LogTickLabelFormatter;

            //告诉左轴使用我们的自定义刻度生成器
            formsPlot1.Plot.Axes.Left.TickGenerator = tickGen;

            //显示次要刻度的网格线
            var grid = formsPlot1.Plot.GetDefaultGrid();
            grid.MajorLineStyle.Color = Colors.Black.WithOpacity(.15);
            grid.MinorLineStyle.Color = Colors.Black.WithOpacity(.05);
            grid.MinorLineStyle.Width = 1;

            formsPlot1.Refresh();
        }
    }

运行效果展示:

0b70b72397fa8871809d693f31eaff9d.png

项目演示入口

4b5a231b1a6372c48d78b6577f2491a0.png
private void Btn_ScatterChart_Click(object sender, EventArgs e)
        {
            ScatterChart formScatterChart = new ScatterChart();
            // 显示目标窗体
            formScatterChart.Show();
        }

        private void Btn_PieChart_Click(object sender, EventArgs e)
        {
            PieChart formPieChart = new PieChart();
            // 显示目标窗体
            formPieChart.Show();
        }

        private void Btn_BarChart_Click(object sender, EventArgs e)
        {
            BarChart formbarChart = new BarChart();
            // 显示目标窗体
            formbarChart.Show();
        }

        private void Btn_LineChart_Click(object sender, EventArgs e)
        {
            LineChart formLineChart = new LineChart();
            // 显示目标窗体
            formLineChart.Show();
        }

项目源码地址

更多项目实用功能和特性欢迎前往项目开源地址查看👀,别忘了给项目一个Star支持💖。

  • GitHub开源地址:https://github.com/ScottPlot/ScottPlot

  • 在线文档地址:https://scottplot.net/cookbook/5.0/

  • ScottPlotWinFormsExercise:https://github.com/YSGStudyHards/DotNetExercises

优秀项目和框架精选

该项目已收录到C#/.NET/.NET Core优秀项目和框架精选中,关注优秀项目和框架精选能让你及时了解C#、.NET和.NET Core领域的最新动态和最佳实践,提高开发工作效率和质量。坑已挖,欢迎大家踊跃提交PR推荐或自荐(让优秀的项目和框架不被埋没🤞)。

  • https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.md

c6adee8c91935361b87b820350b50a21.gif

eedb07fdb40f1173fd273b697cc9ad4f.gif

45df5b87afebe9d0d4bdf00f5dce5035.jpeg


学习是一个永无止境的过程,你知道的越多,你不知道的也会越多,在有限的时间内坚持每天多学一点,你一定能成为你想要成为的那个人。不积跬步无以至千里,不积小流无以成江河!!!

e244d9047d45f2d0752f4a8b6cdae918.gif

See you next good day

02a1ae1fdd64b04d9fb1a5de93751b25.gif

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
# .NET WinForms是什么? .NET WinForms是一种用于开发Windows桌面应用程序的技术框架。它是微软公司推出的一种基于.NET平台的用户界面开发工具包。通过使用WinForms,开发人员可以创建具有图形用户界面(GUI)的各种功能强大的Windows应用程序,例如桌面应用程序、工具、实用程序和游戏等。 # .NET WinForms的特点和优势 1. 简单易学:WinForms使用C#或VB.NET等编程语言,具有直观的可视化设计工具,使开发人员能够快速创建和布局用户界面。 2. 高度可定制化:开发人员可以使用WinForms控件的各种控件和组件,通过属性、方法和事件来自定义应用程序的行为和外观。 3. 丰富的控件WinForms提供了丰富的控件,包括按钮、文本框、列表框、下拉框、树状控件、网格控件等,以满足各种应用程序的需求。 4. 跨平台兼容性:WinForms应用程序可以在Windows操作系统的各个版本上运行,并且与不同版本的.NET Framework兼容。 5. 强大的事件模型:WinForms提供了丰富的事件模型,使开发人员能够通过事件处理程序来响应用户的操作,实现交互式的应用程序。 6. 支持数据绑定:WinForms支持数据绑定,可以将数据源与用户界面控件进行绑定,实现数据的显示和操作。 7. 提供安全性和稳定性:WinForms应用程序是在.NET运行时环境执行的,具有较高的安全性和稳定性。 # .NET WinForms的应用领域 .NET WinForms广泛应用于各种领域,如企业管理系统、客户关系管理工具、图像处理工具、游戏开发等。它提供了快速开发、易维护和稳定的解决方案,使开发人员能够以较低的成本创建功能强大的桌面应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值