C#科学绘图之使用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绘制多个图像内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
最新评论