262.C# ScottPlot Signal Plot可视化时间序列数据

262.C# ScottPlot Signal Plot可视化时间序列数据

编码文章call10242025-02-01 3:32:2012A+A-

摘要


在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

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指定起始值。
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可以实时交互地显示数百万个数据点。

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

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属性来指定在图例中显示的文本。这样,您可以为每个绘图对象定义自定义的标签,以便在图例中清晰地显示。

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( "测试");
 
}

//填充背景颜色
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"));

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

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

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);
}

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4