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

使用ScottPlot开源库在WinForms中快速实现大型数据集的交互式图表显示

时间:2024-03-15 09:44:34浏览次数:22  
标签: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/mq0036/p/18074739

相关文章

  • 真炸裂,发现一款基于springboot超级好用的开源服务器框架
    兄弟们,真不骗你们,这个框架用起来是真的爽,简直是服务器开发人员的福音!集成该项目后,不用我们程序员再去处理api安全、加签、验签、参数校验、加解密、数据脱敏、异常处理、国际化、接口文档、错误码、缓存、分布式锁、应用、渠道管理等等功能。而且为了帮助客户端开发的同学更简......
  • Langchain-Chatchat开源库使用的随笔记(一)
    转自:https://zhuanlan.zhihu.com/p/6760612691Chatchat项目结构整个结构是server 启动API,然后项目内自行调用API。API详情可见:http://xxx:7861/docs ,整个代码架构还是蛮适合深入学习 在这里插入图片描述 2Chatchat一些代码学习2.112个分块函数统一使用截止2023......
  • OpenCV4.9.0开源计算机视觉库安装概述
    上一篇:OpenCV环境变量参考下一篇:​​​​​​​OpenCV4.9.0配置选项参考引言:OpenCV是一款开源的计算机视觉库,可用于实时的图像处理、图形识别、机器学习等领域。它具有跨平台、高速、易用等特点,并广泛应用于各种领域,如医学、安防、自动驾驶、AR/VR等。本文将简要介绍如何基......
  • ThingsBoard 开源物联网平台
    文章目录1.ThingsBoard介绍2.ThingsBoard架构2.1.单体架构2.2.微服务架构3.物联网网关4.边缘计算ThingsBoard#ThingsBoardhttps://iothub.org.cn/docs/iot/https://iothub.org.cn/docs/iot/thingsboard-ce/1.ThingsBoard介绍ThingsBoard是一个开源物联......
  • 一个开源的分布式在线教育系统
    大家好,我是Java陈序员。今天给大家介绍一个开源的分布式在线教育系统,支持课程在线播放、课程购买等功能。关注微信公众号:【Java陈序员】,获取开源项目分享、AI副业分享、超200本经典计算机电子书籍等。项目介绍roncoo-education——一个分布式在线教育系统。目前主要功能......
  • OpenAI官宣开源Transformer Debugger!不用再写代码了
    刚刚,OpenAI超级对齐团队负责人官宣开源Transformer调试器。研究人员不用写代码,就能快速探索LLM的内部构造了!这项工作,是用GPT-4来分析GPT2中输入和输出之间的对应关系,从而推断各个神经元可能承担什么语言特征编码职责,如词性、句法结构、上下文关系等。如果去掉某个神经元后,模型......
  • 使用ScottPlot库在.NET WinForms中快速实现大型数据集的交互式显示
    前言在.NET应用开发中数据集的交互式显示是一个非常常见的功能,如需要创建折线图、柱状图、饼图、散点图等不同类型的图表将数据呈现出来,帮助人们更好地理解数据、发现规律,并支持决策和沟通。本文我们将一起来学习一下如何使用ScottPlot库在.NETWinForms中快速实现大型数据集的交......
  • 生物分子体系结构预测开源模型RoseTTAFold All-Atom的conda环境部署及使用
    欢迎浏览我的CSND博客!Blockbuater_drug…点击进入文章目录前言一、RoseTTAFoldAll-Atom(RFAA)是什么?二、安装步骤1.安装mamba(非必须的,conda也可以)2.下载RoseTTAFold-All-Atom3.创建conda环境并安装4.安装SE3T5.准备cs-blast6.安装signalp67.下载序列和模板......
  • 【开源】SpringBoot框架开发人事管理系统
    目录一、摘要1.1项目介绍1.2项目录屏二、功能模块2.1管理员功能模块2.2普通员工功能模块2.3答辩文案三、系统展示四、核心代码4.1查询职称4.2新增留言回复4.3工资申请4.4工资审核4.5员工请假五、免责说明一、摘要1.1项目介绍基于JAVA+Vue+SpringBo......
  • 【开源】SpringBoot框架开发班级考勤管理系统
    目录一、摘要1.1项目介绍1.2项目录屏二、功能模块2.1系统基础支持模块2.2班级学生教师支持模块2.3考勤签到管理2.4学生请假管理三、系统设计3.1功能设计3.1.1系统基础支持模块3.1.2班级学生教师档案模块3.1.3考勤签到管理模块3.1.4学生请假管理模块3.2......