编辑
2025-09-26
C#
00

目录

摘要
正文

摘要

在C#中,ScottPlot是一个开源的绘图库,用于在Windows Forms和WPF应用程序中创建高性能的科学图形。Signal Plot是ScottPlot库中的一个功能,用于绘制和可视化时间序列数据。

正文

Signal Plot可以用于以下应用场景:

  1. 数据分析和可视化:可以使用Signal Plot绘制和分析时间序列数据,例如传感器数据、金融数据、生物医学数据等。它可以帮助用户更好地理解数据的趋势、周期性和异常情况。
  2. 实时数据监控:Signal Plot可以实时更新并显示数据,适用于需要实时监控和可视化数据的应用场景,例如实时传感器数据监控、实时股票行情监控等。
  3. 信号处理和滤波:Signal Plot可以用于绘制和分析信号处理和滤波后的数据,帮助用户观察信号的频谱、频率响应和滤波效果。
  4. 控制系统分析:Signal Plot可以用于绘制和分析控制系统的输入输出信号,帮助用户了解和调试控制系统的性能和稳定性。

nuget 安装 ScottPlot.Winforms

image.png

Generate 类下常用方法

  1. Generate.Sin(int pointCount, double oscillations = 1, double phaseOffset = 0): 生成一个正弦波形的示例数据。参数pointCount指定生成数据的点数,oscillations指定正弦波形的周期数,phaseOffset指定相位偏移量。
  2. Generate.Cos(int pointCount, double oscillations = 1, double phaseOffset = 0): 生成一个余弦波形的示例数据。参数pointCount指定生成数据的点数,oscillations指定余弦波形的周期数,phaseOffset指定相位偏移量。
  3. Generate.Random(int pointCount, double minimum = 0, double maximum = 1): 生成一个随机数序列的示例数据。参数pointCount指定生成数据的点数,minimum和maximum指定随机数的范围。
  4. Generate.RandomWalk(int pointCount, double stepSize = 1, double startingValue = 0): 生成一个随机游走序列的示例数据。参数pointCount指定生成数据的点数,stepSize指定每一步的步长,startingValue指定起始值。

image.png

C#
private void Form1_Load(object sender, EventArgs e) { var plot=formsPlot1.Plot; double[] sin = Generate.Sin(); double[] cos = Generate.Cos(); plot.Add.Signal(sin); plot.Add.Signal(cos); }

Signal Plot可以实时交互地显示数百万个数据点。

C#
var plot=formsPlot1.Plot; double[] data = Generate.RandomWalk(100000); plot.Add.Signal(data);

image.png

C#
private void Form1_Load(object sender, EventArgs e) { var plot=formsPlot1.Plot; //设置字体,防止中文乱码 plot.Style.SetFont("SimSun"); double[] sin = Generate.Sin(); double[] cos = Generate.Cos(); plot.Add.Signal(sin); plot.Add.Signal(cos); //x轴label plot.XAxis.Label.Text = "Horizonal Axis"; //y轴label plot.YAxis.Label.Text = "Vertical Axis"; //标题 plot.Title( "测试"); }

在ScottPlot中,可以通过设置绘图对象的Label属性来指定在图例中显示的文本。这样,您可以为每个绘图对象定义自定义的标签,以便在图例中清晰地显示。

image.png

C#
private void Form1_Load(object sender, EventArgs e) { var plot=formsPlot1.Plot; //设置字体,防止中文乱码 plot.Style.SetFont("SimSun"); double[] sin = Generate.Sin(); double[] cos = Generate.Cos(); var s1= plot.Add.Signal(sin); var s2=plot.Add.Signal(cos); //设置图例 s1.Label = "SIN"; s2.Label = "COS"; //显示图例 plot.Legend(); //x轴label plot.XAxis.Label.Text = "Horizonal Axis"; //y轴label plot.YAxis.Label.Text = "Vertical Axis"; //标题 plot.Title( "测试"); }

image.png

C#
//填充背景颜色 plot.Style.Background(figure: ScottPlot.Color.FromHex("#07263b"), data: ScottPlot.Color.FromHex("#0b3049")); plot.Style.ColorAxes(ScottPlot.Color.FromHex("#a0acb5")); //画Grid线 plot.Style.ColorGrids(ScottPlot.Color.FromHex("#0e3d54"));

image.png

C#
//设置线宽 s1.LineStyle.Width = 3; s2.LineStyle.Width = 5; //线的颜色 s1.LineStyle.Color = ScottPlot.Colors.Red;

image.png

C#
//设置grid样式 grid.MajorLineStyle.Color = Colors.Brown.WithOpacity(.5); grid.MinorLineStyle.Color = Colors.Green.WithOpacity(.1); grid.MinorLineStyle.Width = 1;

image.png

C#
private void Form1_Load(object sender, EventArgs e) { var plot = formsPlot1.Plot; //产生100天的日期 DateTime[] dates = Generate.DateTime.Days(100, DateTime.Parse("2023-1-1")); double[] xs = dates.Select(x => x.ToOADate()).ToArray(); //生成测试数值 double[] ys = Generate.RandomWalk(xs.Length); plot.Add.Scatter(xs, ys); plot.AxisStyler.DateTimeTicks(Edge.Bottom); }

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!