摘要
在C#中,ScottPlot是一个开源的绘图库,用于在Windows Forms和WPF应用程序中创建高性能的科学图形。Signal Plot是ScottPlot库中的一个功能,用于绘制和可视化时间序列数据。
正文
Signal Plot可以用于以下应用场景:
- 数据分析和可视化:可以使用Signal Plot绘制和分析时间序列数据,例如传感器数据、金融数据、生物医学数据等。它可以帮助用户更好地理解数据的趋势、周期性和异常情况。
- 实时数据监控:Signal Plot可以实时更新并显示数据,适用于需要实时监控和可视化数据的应用场景,例如实时传感器数据监控、实时股票行情监控等。
- 信号处理和滤波:Signal Plot可以用于绘制和分析信号处理和滤波后的数据,帮助用户观察信号的频谱、频率响应和滤波效果。
- 控制系统分析:Signal Plot可以用于绘制和分析控制系统的输入输出信号,帮助用户了解和调试控制系统的性能和稳定性。
nuget 安装 ScottPlot.Winforms
Generate 类下常用方法
- Generate.Sin(int pointCount, double oscillations = 1, double phaseOffset = 0): 生成一个正弦波形的示例数据。参数pointCount指定生成数据的点数,oscillations指定正弦波形的周期数,phaseOffset指定相位偏移量。
- Generate.Cos(int pointCount, double oscillations = 1, double phaseOffset = 0): 生成一个余弦波形的示例数据。参数pointCount指定生成数据的点数,oscillations指定余弦波形的周期数,phaseOffset指定相位偏移量。
- Generate.Random(int pointCount, double minimum = 0, double maximum = 1): 生成一个随机数序列的示例数据。参数pointCount指定生成数据的点数,minimum和maximum指定随机数的范围。
- 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);
}