前言:
而今兄弟们对“c语言画图函数”大约比较注重,你们都需要知道一些“c语言画图函数”的相关文章。那么小编同时在网络上搜集了一些对于“c语言画图函数””的相关知识,希望小伙伴们能喜欢,姐妹们快快来学习一下吧!简介
我们经常要在 WinForm 窗体应用程序中绘制波形图表,WinForm的内置图表控件比较丑且功能有限,此时我们可以寻找替代解决方案。
存在许多第三方图表工具,其中大多数是商业的,需要花钱买版权才能使用。而有一些则是免费且又比较好用的,最有名气的当属Scott Plot。本教程将使用ScottPlot,这是一个适用于.NET的免费开源绘图库。
ScottPlot入门
使用ScottPlot 绘图的基本操作步骤如下:
步骤1:安装ScottPlot.WinForms NuGet 包(需注意项目依赖的.NET Framework版本);
步骤2:将“FormsPlot”从“工具箱”拖拽至WinForm窗体中;
步骤3:编写代码,可参照如下图所示的基础样例。
简单样例:
using ScottPlot;using System;using System.Windows.Forms;namespace ScottPlotDemo1_WinForm{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { CreateChart(); } private void CreateChart() { double[] dataX = new double[] { 1, 2, 3, 4, 5 }; double[] dataY = new double[] { 1, 4, 9, 16, 25 }; formsPlot1.Plot.AddScatter(dataX, dataY); formsPlot1.Refresh(); } }}
运行效果:
还可以在图表控件中增加X轴标签、Y轴标签、图表标题等,示例如下
formsPlot1.Plot.XLabel("时间[s]"); formsPlot1.Plot.YLabel("温度[°C]"); formsPlot1.Plot.Title("温度传感器"); formsPlot1.Refresh();
单点实时绘图
通常,我们希望实时更新绘图,比如从温度传感器获取逐个的获取数据后实时更新温度曲线等。在下面的示例中,将使用C# 内置的随机函数用于每秒使用新值更新绘图:
using System;using System.Drawing;using System.Linq;using System.Windows.Forms;namespace ScottPlotDemo_WinForm{ public partial class Form1 : Form { double[] dataX = new double[0]; double[] dataY = new double[0]; int k = 0; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { InitializeChart(); timer1.Interval = 1000; timer1.Start(); } private void InitializeChart() { formsPlot1.Plot.XLabel("时间[s]"); formsPlot1.Plot.YLabel("温度[°C]"); formsPlot1.Plot.Title("温度传感器"); formsPlot1.Refresh(); } private void timer1_Tick(object sender, EventArgs e) { UpdateChart(); } private void UpdateChart() { k++; double newValue = GetSensorData(); dataX = dataX.Append(k).ToArray(); dataY = dataY.Append(newValue).ToArray(); formsPlot1.Plot.AddScatter(dataX, dataY, color: Color.Orange); formsPlot1.Plot.AxisAuto(); formsPlot1.Render(); } private double GetSensorData() { Random rand = new Random(); double sensorValue = rand.NextDouble() * 10 + 20; //Random Value between 20 and 30 return sensorValue; } }}
注意此处使用了定时器来以特定的时间间隔更新数据,在末尾使用 AxisAuto() 和 Render()方法,以确保图表已成功更新。
程序运行效果如下图所示:
标签: #c语言画图函数