c#发展

首页 » 常识 » 诊断 » ScottPlot绘图教程CWinfo
TUhjnbcbe - 2025/4/26 18:01:00
简介

我们经常要在WinForm窗体应用程序中绘制波形图表,WinForm的内置图表控件比较丑且功能有限,此时我们可以寻找替代解决方案。

存在许多第三方图表工具,其中大多数是商业的,需要花钱买版权才能使用。而有一些则是免费且又比较好用的,最有名气的当属ScottPlot。本教程将使用ScottPlot,这是一个适用于.NET的免费开源绘图库。

ScottPlot入门

使用ScottPlot绘图的基本操作步骤如下:

步骤1:安装ScottPlot.WinFormsNuGet包(需注意项目依赖的.NETFramework版本);

通过NuGET安装ScottPlot.WinForms

步骤2:将“FormsPlot”从“工具箱”拖拽至WinForm窗体中;

将“FormsPlot”从“工具箱”拖拽至WinForm窗体

步骤3:编写代码,可参照如下图所示的基础样例。

简单样例:

usingScottPlot;usingSystem;usingSystem.Windows.Forms;namespaceScottPlotDemo1_WinForm{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}privatevoidForm1_Load(objectsender,EventArgse){CateChart();}privatevoidCateChart(){double[]dataX=newdouble[]{1,2,3,4,5};double[]dataY=newdouble[]{1,4,9,16,25};formsPlot1.Plot.AddScatter(dataX,dataY);formsPlot1.Refsh();}}}

运行效果:

运行效果

还可以在图表控件中增加X轴标签、Y轴标签、图表标题等,示例如下

formsPlot1.Plot.XLabel("时间[s]");formsPlot1.Plot.YLabel("温度[°C]");formsPlot1.Plot.Title("温度传感器");formsPlot1.Refsh();

单点实时绘图

通常,我们希望实时更新绘图,比如从温度传感器获取逐个的获取数据后实时更新温度曲线等。在下面的示例中,将使用C#内置的随机函数用于每秒使用新值更新绘图:

usingSystem;usingSystem.Drawing;usingSystem.Linq;usingSystem.Windows.Forms;namespaceScottPlotDemo_WinForm{publicpartialclassForm1:Form{double[]dataX=newdouble[0];double[]dataY=newdouble[0];intk=0;publicForm1(){InitializeComponent();}privatevoidForm1_Load(objectsender,EventArgse){InitializeChart();timer1.Interval=;timer1.Start();}privatevoidInitializeChart(){formsPlot1.Plot.XLabel("时间[s]");formsPlot1.Plot.YLabel("温度[°C]");formsPlot1.Plot.Title("温度传感器");formsPlot1.Refsh();}privatevoidtimer1_Tick(objectsender,EventArgse){UpdateChart();}privatevoidUpdateChart(){k++;doublenewValue=GetSensorData();dataX=dataX.Append(k).ToArray();dataY=dataY.Append(newValue).ToArray();formsPlot1.Plot.AddScatter(dataX,dataY,color:Color.Orange);formsPlot1.Plot.AxisAuto();formsPlot1.Render();}privatedoubleGetSensorData(){Randomrand=newRandom();doublesensorValue=rand.NextDouble()*10+20;//RandomValuebetween20and30turnsensorValue;}}}

注意此处使用了定时器来以特定的时间间隔更新数据,在末尾使用AxisAuto()和Render()方法,以确保图表已成功更新。

程序运行效果如下图所示:

单点实时绘图

1
查看完整版本: ScottPlot绘图教程CWinfo