首页 > 其他分享 >使用ScottPlot库在.NET WinForms中快速实现大型数据集的交互式显示

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

时间:2024-03-14 09:03:50浏览次数:25  
标签:double formsPlot1 WinForms 窗体 NET ScottPlot

前言

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

ScottPlot类库介绍

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

ScottPlot类库支持平台和框架

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

ScottPlot类库源代码

新建WinForms项目

新建一个名为ScottPlotWinFormsExercise的项目。

安装ScottPlot.WinForms包

搜索ScottPlot.WinForms包安装:

折线图实现

创建名为:LineChart窗体。

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

输入以下代码:

    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;
        }
    }

运行效果展示:

柱状图实现

创建名为:BarChart窗体。

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

输入以下代码:

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

运行效果展示:

饼图实现

创建名为:PieChart窗体。

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

输入以下代码:

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

运行效果展示:

散点图实现

创建名为:ScatterChart窗体。

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

输入以下代码:

    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();
        }
    }

运行效果展示:

项目演示入口

        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();
        }

项目源码地址

更多项目实用功能和特性欢迎前往项目开源地址查看

标签:double,formsPlot1,WinForms,窗体,NET,ScottPlot
From: https://www.cnblogs.com/Can-daydayup/p/18067442

相关文章

  • 世界银行使用.NET 7开发的免费电子问卷制作系统Survey Solution
    SurveySolution(下文简称SS)是世界银行数据部开发的一套免费电子问卷制作系统,官网地址为:https://mysurvey.solutions/,github地址:https://github.com/surveysolutions/该系统具有以下几个主要特点:通过内置模版可以轻松地制作一系列传统问卷题型,同时还可以实现层级结构......
  • Asp .Net Core 系列:Asp .Net Core 集成 Hangfire+MySQL
    简介https://www.hangfire.io/在.NET和.NETCore应用程序中执行后台处理的简单方法,无需Windows服务或单独的进程。Hangfire是一个开源的.NET任务调度框架,它提供了内置集成化的控制台,允许用户直观明了地查看作业调度情况。Hangfire不需要依赖于单独的应用程序执行(如Wi......
  • Adaptive Diffusion in Graph Neural Networks论文阅读笔记
    AdaptiveDiffusioninGraphNeuralNetworks论文阅读笔记Abstract​ 最近提出了图扩散卷积(GDC),利用广义图扩散来扩展传播邻域。然而,GDC中的邻域大小是通过在验证集上进行网格搜索来手动对每个图进行调整的,这使得其泛化实际上受到了限制。为了解决这个问题,我们提出了自适应扩散......
  • 深度学习——LeNet卷积神经网络初探
    LeNet--卷积神经网络初探模型介绍:简单介绍:从网络结构可以看出LeNet对于现在的大模型来说是一个非常小的神经网络,他一共由7个层顺序连接组成。分别是卷积层、pooling层、卷积层、pooling层和三个全连接层。用现代的深度学习框架来实现代码如下:代码实现和解读:net=nn.Sequent......
  • Java 错误 java.net.ConnectException
    本篇文章介绍了Java中的java.net.ConnectException错误。Java中的java.net.ConnectException错误java.net.ConnectException是使用网络时最常见的异常。它主要发生在客户端、应用程序和服务器之间建立TCP连接时。它是一个经过检查的应用程序,可以使用try-cat......
  • kubernetes中使用Service反向代理外部服务
    参考https://blog.csdn.net/weixin_43334786/article/details/128432325当我们的某个服务在外部集群的时候,但是又想k8s集群内的应用连接它,这是可以创建一个service,用service代理外部服务,然后集群内就能连接该service,从而间接的访问外部服务。创建一个service代理外部的服务创......
  • 不使用telnet进行端口测试的方法
    不使用telnet进行端口测试的方法 测试通过样例[root@ip203~]#curl-v10.0.0.210:8082*Abouttoconnect()to10.0.0.210port8082(#0)*Trying10.0.0.210...*Connectedto10.0.0.210(10.0.0.210)port8082(#0)>GET/HTTP/1.1>User-Agent:curl/7.29......
  • C# Onnx C2PNet 图像去雾 室外场景
    目录介绍效果模型信息项目代码下载C#OnnxC2PNet图像去雾室外场景介绍github地址:https://github.com/YuZheng9/C2PNet[CVPR2023]CurricularContrastiveRegularizationforPhysics-awareSingleImageDehazing效果模型信息ModelProperties-----------......
  • JSON序列化之旅:深入理解.NET中的JsonResult与自定义ContractResolver
    在.NET开发的世界里,JSON已成为一种无处不在的数据交换格式。无论是WebAPI还是微服务架构,我们都经常需要将对象序列化成JSON格式,以方便客户端的接收和处理。今天,我想和大家分享一段关于.NET中JsonResult使用的代码,以及它背后的一些细节。这段代码来自于一个典型的ASP.NETCore应......
  • .NET集成DeveloperSharp实现强大的AOP
    (适用于.NET/.NETCore/.NETFramework)【目录】0.前言1.第一个AOP程序2.Aspect横切面编程3.一个横切面程序拦截多个主程序4.多个横切面程序拦截一个主程序5.优势总结6.展望0.前言AOP(AspectOrientedProgramming)是“面向横切面编程”,主要是用来对程序/模块进行解耦。怎么理解??我们......