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#单例模式(Singleton)的6种实现

    c#单例模式(Singleton)的6种实现

    这篇文章主要介绍了c#单例模式(Singleton)的6种实现 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • C# 提取PDF中的表格详情

    C# 提取PDF中的表格详情

    这篇文章主要给大家介绍C# 提取PDF中的表格,本文介绍在C#程序中(附VB.NET代码)提取PDF中的表格的方法,调用Spire.PDF for .NET提供的提取表格的 类 以及 方法 等来获取表格单元格中的文本内容,需要的朋友可以参考一下
    2021-10-10
  • C#实现简单的汽车租赁系统

    C#实现简单的汽车租赁系统

    这篇文章主要为大家详细介绍了C#实现汽车租赁系统的具体实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • C#使用Win32 Api实现进程注入到wechat的过程

    C#使用Win32 Api实现进程注入到wechat的过程

    这篇文章主要介绍了C#使用Win32 Api实现进程注入到wechat,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • C#实现将程序锁定到Win7任务栏的方法

    C#实现将程序锁定到Win7任务栏的方法

    这篇文章主要介绍了C#实现将程序锁定到Win7任务栏的方法,涉及C#调用Shell类的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08
  • C#七大经典排序算法系列(上)

    C#七大经典排序算法系列(上)

    这篇文章主要为大家详细介绍了C#七大经典排序算法系列上篇,冒泡排序,快速排序等,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • c#如何使用UDP进行聊天通信

    c#如何使用UDP进行聊天通信

    这篇文章主要介绍了c#如何使用UDP进行聊天通信问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • C#实现复制数据库 C#将A数据库数据转到B数据库

    C#实现复制数据库 C#将A数据库数据转到B数据库

    这篇文章主要为大家详细介绍了C#复制数据库,将数据库数据转到另一个数据库,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • C# LiteDB基本使用示例代码

    C# LiteDB基本使用示例代码

    LiteDB是一种文档型单文件数据库,基于Key-Value方式存取数据,LiteDB 的灵感来自 MongoDB 数据库,所以它的 API 和 MongoDB 的 .NET API 非常相似,这篇文章主要介绍了C# LiteDB基本使用,需要的朋友可以参考下
    2024-03-03
  • C# Winform实现自定义分页控件

    C# Winform实现自定义分页控件

    一些第三方的分页控件要么就是界面不够美观大方,要么就是使用起来感觉很麻烦,所以本文就为大家介绍一下如何利用Winform自定义分页控件,需要的可以参考一下
    2023-07-07

最新评论