写点什么

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

作者:追逐时光者
  • 2025-10-04
    广东
  • 本文字数:3592 字

    阅读完需:约 12 分钟

前言

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

ScottPlot 类库介绍

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

DotNetGuide 编程学院

DotNetGuide 编程学院是一个专注于 C#/.NET/.NET Core 学习、工作、面试干货和实战教程分享的知识星球!当然这里不仅仅只有 C#/.NET/.NET Core 还有前端、云原生(Docker,K8s)、分布式,微服务、实用工具、学习书籍、AIGC、AI 赋能、求职和招聘资讯、热点资讯等多个领域,我们致力于构建一个积极向上、和谐友善的.NET 技术交流、学习平台。无论您是初学者还是有丰富经验的开发者,我们都希望能为您提供更多的价值和成长机会。

加入后如果感觉不值得,3 天内在知识星球 APP 右上角点击退出星球,可直接全额退款,无任何套路!

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();        }
复制代码

项目源码地址

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

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

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

  • 本文示例源码地址: https://github.com/YSGStudyHards/DotNetExercises

优秀项目和框架精选

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

发布于: 刚刚阅读数: 3
用户头像

不积跬步无以至千里,不积小流无以成江海! 2020-01-14 加入

微软MVP、华为云HCDE、华为云云享专家、51CTO专家博主、阿里云专家博主、博客园推荐博客、CSDN博客专家、腾讯云创作之星、掘金优秀创作者,一个热爱开源的全栈软件工程师,擅长C#、.NET、Vue等相关技术开发。

评论

发布
暂无评论
使用 ScottPlot 在 .NET WinForms 中快速实现大型数据集的交互式显示!_C#_追逐时光者_InfoQ写作社区