C#科学绘图之使用scottPlot绘制多个图像

 更新时间:2023年12月12日 08:57:19   作者:微小冷  
ScottPlot是基于.Net的一款开源免费的交互式可视化库,支持Winform和WPF等UI框架,本文主要为大家详细介绍了如何使用scottPlot实现绘制多个图像,需要的可以参考下

示例

从名字就能看出,ScottPlot的绘图函数AddScatter的作用是为图窗添加数据点,换言之,每调用一次AddScatter,就可以在图窗中添加一组图像。下面添加两个按钮,分别用于绘制正弦和余弦图像,其正弦按钮的响应函数如下

ScatterPlot sinPlot;
private void btnSin_Click(object sender, RoutedEventArgs e)
{
    var xs = Enumerable.Range(0, 1000).Select(x => x / 100.0).ToArray();
    var ys = xs.Select(x => Math.Sin(x)).ToArray();

    sinPlot = plt.Plot.AddScatter(xs, ys);
    plt.Refresh();
}

其中,sinPlot被设为全局变量,目的是方便后续用其他按钮来操纵函数图像。余弦图像的相应函数如出一辙,只需把变量名以及y s ysys的生成过程更改一下,效果如下

移除图像

移除图像,只需调用Remove函数,以移除正弦函数为例,其相应动作如下

private void btnRmSin_Click(object sender, RoutedEventArgs e)
{
    plt.Plot.Remove(sinPlot);
    plt.Refresh();
}

下面演示一下移除图像的效果,顺便参悟一下弹出窗口的逻辑,所谓弹出窗口,就是把当前图窗中的图形作为一个对象复制一份,然后这个对象将与旧图窗变成陌生人,互不相干。

图例

若想在图窗中对两个图像做区分,就需要指明图像的Label,仍以正弦函数为例,修改绘制按钮的点击函数,当然余弦函数也做相似处理。

private void btnSin_Click(object sender, RoutedEventArgs e)
{
    var xs = Enumerable.Range(0, 100).Select(x => x / 10.0).ToArray();
    var ys = xs.Select(x => Math.Sin(x)).ToArray();

    sinPlot = plt.Plot.AddScatter(xs, ys,label:"sin");
    plt.Plot.Legend();
    plt.Refresh();
}

由于前面1000 10001000个点的绘制效果不太好看,所以上面代码把点数控制在100个,绘制结果如下

信号图

Scott支持把不同类型的图像在一个图窗中绘制,例如可以同时绘制散点图和信号图,示例如下

SignalPlot sigPlot;
private void btnSignal_Click(object sender, RoutedEventArgs e)
{
    double[] values = DataGen.RandomWalk(1_000_000, 0.003, 0.5);
    sigPlot = plt.Plot.AddSignal(values, sampleRate: 48_000);
    plt.Refresh();
}

这个图像和前面的sinPlot,cosPlot连数据类型都是不一致的,不过很显然二者有相同的父类。下面是其绘图结果

到此这篇关于C#科学绘图之使用scottPlot绘制多个图像的文章就介绍到这了,更多相关C# scottPlot绘制多个图像内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#中常量和只读变量的区别小结

    C#中常量和只读变量的区别小结

    本篇文章主要是对C#中常量和只读变量的区别进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-01-01
  • Unity实现鼠标双击与长按的检测

    Unity实现鼠标双击与长按的检测

    这篇文章主要为大家详细介绍了Unity实现鼠标双击与长按的检测,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • C# Cache缓存读取的设置方法

    C# Cache缓存读取的设置方法

    这篇文章主要介绍了C# Cache缓存读取的设置方法,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下
    2021-03-03
  • c#设计模式之单例模式的实现方式

    c#设计模式之单例模式的实现方式

    这篇文章主要给大家介绍了关于c#设计模式之单例模式的实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者使用c#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-11-11
  • C#生成随机验证码代码分享

    C#生成随机验证码代码分享

    这篇文章主要分享了C#生成随机验证码代码,另外附上使用示例,非常的简单实用,有需要的朋友可以参考下
    2014-10-10
  • C#实现设置或屏蔽热键的方法详解

    C#实现设置或屏蔽热键的方法详解

    这篇文章主要为大家详细介绍了如何利用C#实现设置或屏蔽热键,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以跟随小编一起了解一下
    2022-12-12
  • C# 基于NPOI操作Excel

    C# 基于NPOI操作Excel

    最近遇到一个数据导入的需求,语言是.net framework 4.7的C#。但是,这次主要探讨NPOI的体验,原则就是向前兼容。所以采用.xls的支持。下面就来看看实现步骤
    2021-06-06
  • c# DataView.ToTable()方法 去除表的重复项问题

    c# DataView.ToTable()方法 去除表的重复项问题

    这篇文章主要介绍了c# DataView.ToTable()方法 去除表的重复项问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • C# lambda表达式应用如何找出元素在list中的索引

    C# lambda表达式应用如何找出元素在list中的索引

    这篇文章主要介绍了C# lambda表达式应用如何找出元素在list中的索引的相关资料,需要的朋友可以参考下
    2018-01-01
  • C#连接Oracle数据库的实例方法

    C#连接Oracle数据库的实例方法

    C#连接Oracle数据库的实例方法,需要的朋友可以参考一下
    2013-04-04

最新评论