• WPF_基于ScottPlot的实时曲线绘制


    目录

    1 安装ScottPlot

    2 测试代码

    2.1 MainWindow.cs

     2.2 MainWindow.xaml

    3 运行结果

    4 离线移植

    4.1 文件拷贝

    4.2 添加引用

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

    ​编辑

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

    5、值得注意的一点


    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. ///
    8. /// MainWindow.xaml 的交互逻辑
    9. ///
    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

    类似内容参考链接:【ScottPlot】使用ScottPlot创建实时动态图-CSDN博客

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

  • 相关阅读:
    DEJA_VU3D - Cesium功能集 之 056-智图Arcgis地图纠偏
    C语言 每日一题 PTA 10.21-10.24日 day3
    ssm基于JAVA的二手房屋信息管理系统设计与实现毕业设计源码271542
    MySQL数据库详解 一:安装MySQL数据库及基本管理
    通过工具分析MongoDB性能问题
    结构型模式-桥接模式
    java计算机毕业设计华北地区阔叶林木叶部病虫害图像管理系统源码+mysql数据库+系统+lw文档+部署
    Python元组(Tuple)定义和操作示例
    我第一个开源AI小产品-video2blog即将正式发布
    websocket中的STOMP 协议:sockjs-client 和 stompjs
  • 原文地址:https://blog.csdn.net/heqiunong/article/details/127787151