当前位置:   article > 正文

WPF_基于ScottPlot的实时曲线绘制

scottplot

1 安装ScottPlot

 

2 测试代码

2.1 MainWindow.cs

  1. using System;
  2. using System.Diagnostics;
  3. using System.Threading;
  4. using System.Windows;
  5. namespace ScottplotTest
  6. {
  7. /// <summary>
  8. /// MainWindow.xaml 的交互逻辑
  9. /// </summary>
  10. public partial class MainWindow : Window
  11. {
  12. double[] myData1 = new double[200];
  13. double[] myData2 = new double[200];
  14. ScottPlot.Plottable.SignalPlot signalPlot1;
  15. ScottPlot.Plottable.SignalPlot signalPlot2;
  16. bool initflag = false;
  17. public MainWindow()
  18. {
  19. InitializeComponent();
  20. this.Closing += CloseWindow;
  21. signalPlot1 = this.WpfPlot1.Plot.AddSignal(myData1, 0.1, System.Drawing.Color.Black, label: "曲线1");
  22. signalPlot2 = this.WpfPlot1.Plot.AddSignal(myData2, 0.1, System.Drawing.Color.Magenta, label: "曲线2");
  23. //WpfPlot1.Plot.XAxis.Label("Time (milliseconds)");
  24. WpfPlot1.Plot.YAxis.Label("Celsius temperature (°C)");
  25. WpfPlot1.Plot.XAxis2.Label("Title");
  26. // One Axis Only
  27. WpfPlot1.Plot.XAxis.Ticks(false);
  28. WpfPlot1.Plot.XAxis.Line(false);
  29. WpfPlot1.Plot.YAxis2.Line(false);
  30. WpfPlot1.Plot.XAxis2.Line(false);
  31. Thread SPdataProcessing = new Thread(RefreshOPMUI);
  32. //signalPlot1.Label = "a";
  33. // signalPlot2.Label = "b";
  34. WpfPlot1.Plot.Legend();
  35. WpfPlot1.Refresh();
  36. signalPlot1.IsVisible = true;
  37. signalPlot2.IsVisible = true;
  38. initflag = true;
  39. signalPlot1.OffsetX = 0;
  40. signalPlot2.OffsetX = 0;
  41. SPdataProcessing.Start();
  42. Array.Copy(myData1, 1, myData1, 0, myData1.Length - 1);
  43. Array.Copy(myData2, 1, myData2, 0, myData2.Length - 1);
  44. myData1[myData1.Length - 1] = 50;
  45. myData2[myData2.Length - 1] = 20;
  46. WpfPlot1.Refresh();
  47. }
  48. public void RefreshOPMUI()
  49. {
  50. while (true)
  51. {
  52. Random rd = new Random();
  53. int v1 = rd.Next(0, 200);
  54. int v2 = rd.Next(0, 1000);
  55. // double[] values = ScottPlot.DataGen.RandomWalk(rand, 2);
  56. Array.Copy(myData1, 1, myData1, 0, myData1.Length - 1);
  57. Array.Copy(myData2, 1, myData2, 0, myData2.Length - 1);
  58. myData1[myData1.Length - 1] = v1;
  59. myData2[myData2.Length - 1] = v2;
  60. Dispatcher.Invoke(new Action(delegate
  61. {
  62. WpfPlot1.Refresh();
  63. WpfPlot1.Plot.AxisAutoY();
  64. // WpfPlot1.Plot.AxisAutoX();
  65. }));
  66. Thread.Sleep(50);
  67. }
  68. }
  69. // 关闭窗口
  70. private void CloseWindow(object sender, System.ComponentModel.CancelEventArgs e)
  71. {
  72. Process.GetCurrentProcess().Kill();
  73. this.Close();
  74. }
  75. private void CheckBox_Checked(object sender, RoutedEventArgs e)
  76. {
  77. if (initflag == false) {
  78. return;
  79. }
  80. if (checkBox.IsChecked == true) {
  81. signalPlot1.IsVisible = true;
  82. }
  83. else{
  84. signalPlot1.IsVisible = false;
  85. }
  86. }
  87. private void CheckBox1_Checked(object sender, RoutedEventArgs e)
  88. {
  89. if (initflag == false)
  90. {
  91. return;
  92. }
  93. if (checkBox1.IsChecked == true)
  94. {
  95. signalPlot2.IsVisible = true;
  96. }
  97. else
  98. {
  99. signalPlot2.IsVisible = false;
  100. }
  101. }
  102. }
  103. }

 2.2 MainWindow.xaml

  1. <Window x:Class="ScottplotTest.MainWindow"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  5. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  6. xmlns:local="clr-namespace:ScottplotTest"
  7. mc:Ignorable="d"
  8. Title="MainWindow" Height="450" Width="800">
  9. <Grid>
  10. <WpfPlot Name="WpfPlot1" Margin="0,0,107,59" />
  11. <CheckBox x:Name="checkBox" Content="曲线1" IsChecked="True" HorizontalAlignment="Left" Margin="695,275,0,0" VerticalAlignment="Top" Checked="CheckBox_Checked" Unchecked="CheckBox_Checked"/>
  12. <CheckBox x:Name="checkBox1" Content="曲线2" IsChecked="True" HorizontalAlignment="Left" Margin="695,300,0,0" VerticalAlignment="Top" Checked="CheckBox1_Checked" Unchecked="CheckBox1_Checked"/>
  13. </Grid>
  14. </Window>

3 运行结果

ScottPlotTestVideo2

4 离线移植

4.1 文件拷贝

 

所以离线移植到新的项目的时候,需要拷贝 packages文件夹 以及 packages.config文件

4.2 添加引用

对比安装前与安装后

1、ScottPlot引用路径:                          

packages\ScottPlot.4.1.59\lib\netstandard2.0\ScottPlot.dll

2、ScottPlot.WPF引用路径:                 

packages\ScottPlot.WPF.4.1.59\lib\net461\ScottPlot.WPF.dll

3、System.Drawing引用路径:               

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Drawing.dll

4、System.Drawing.Common引用路径:

packages\System.Drawing.Common.4.6.1\lib\net461\System.Drawing.Common.dll

5、System.Numerics引用路径:

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Numerics.dll
6、System.Numerics.Vectors引用路径:

packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll

 4.2.1  [1、2、4、6]用浏览的方式是找到

 

 

4个引用的操作步骤一样,就不一一截图了。

 

4.2.2  [3、5]用搜索的方式是找到

 

 

5、值得注意的一点

新建项目

注意:新建程序时 框架是:.NET Framework 4.6.1,所以安装的ScottPlot很多引用路径都是n461.

离线移植的程序,最好也选这:.NET Framework 4.6.1

感谢您的阅读,欢迎留言讨论、收藏、点赞、分享。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/97892
推荐阅读
相关标签
  

闽ICP备14008679号