C#科學繪圖之使用scottPlot繪制多個圖像
示例
從名字就能看出,ScottPlot的繪圖函數(shù)AddScatter的作用是為圖窗添加數(shù)據(jù)點,換言之,每調(diào)用一次AddScatter,就可以在圖窗中添加一組圖像。下面添加兩個按鈕,分別用于繪制正弦和余弦圖像,其正弦按鈕的響應函數(shù)如下
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被設為全局變量,目的是方便后續(xù)用其他按鈕來操縱函數(shù)圖像。余弦圖像的相應函數(shù)如出一轍,只需把變量名以及y s ysys的生成過程更改一下,效果如下
移除圖像
移除圖像,只需調(diào)用Remove函數(shù),以移除正弦函數(shù)為例,其相應動作如下
private void btnRmSin_Click(object sender, RoutedEventArgs e) { plt.Plot.Remove(sinPlot); plt.Refresh(); }
下面演示一下移除圖像的效果,順便參悟一下彈出窗口的邏輯,所謂彈出窗口,就是把當前圖窗中的圖形作為一個對象復制一份,然后這個對象將與舊圖窗變成陌生人,互不相干。
圖例
若想在圖窗中對兩個圖像做區(qū)分,就需要指明圖像的Label,仍以正弦函數(shù)為例,修改繪制按鈕的點擊函數(shù),當然余弦函數(shù)也做相似處理。
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個點的繪制效果不太好看,所以上面代碼把點數(shù)控制在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連數(shù)據(jù)類型都是不一致的,不過很顯然二者有相同的父類。下面是其繪圖結果
到此這篇關于C#科學繪圖之使用scottPlot繪制多個圖像的文章就介紹到這了,更多相關C# scottPlot繪制多個圖像內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C#把EXCEL數(shù)據(jù)轉換成DataTable
這篇文章介紹了C#把EXCEL數(shù)據(jù)轉換成DataTable的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-04-04