zedGraph 绘制实时曲线 卡顿

article/2025/10/6 21:49:20

zedGraph是一个开源的曲线绘制插件,由于要制作上位机显示实时数据,百度搜索到了zedgraph,优点是开源,功能也够使用。

缺点是看网址08年后就没有更新过。尝试使用了一下,感觉还可以。 曲线绘制直接看下图。

原理很简单。设置一个曲线属性,然后一直给曲线加点,就会在图上显示。网上也有很多历程。下面是一个生成两个图幅的例子

通过定时器更新曲线,在vs中使用c#实现,网上可以找到源代码。有很多类似的

public partial class Form1 : Form{public Form1(){InitializeComponent();GraphIt();GraphIt2();}private void Form1_Load(object sender, EventArgs e){}LineItem myCurve1, myCurve2, myCurve3;private void GraphIt(){MasterPane master = z1.MasterPane;master.PaneList.Clear();// Display the MasterPane Title, and set the outer margin to 10 pointsmaster.Title.IsVisible = true;master.Title.Text = "实时显示";master.Margin.All = 5;// Create some GraphPane's (normally you would add some curves tooGraphPane pane1 = new GraphPane();GraphPane pane2 = new GraphPane();GraphPane pane3 = new GraphPane();// Add all the GraphPanes to the MasterPanemaster.Add(pane1);//  master.Add(pane2);//  master.Add(pane3);pane1.XAxis.Scale.MinorStep = pane2.XAxis.Scale.MinorStep = pane3.XAxis.Scale.MinorStep = 1;pane1.XAxis.Scale.MajorStep = pane2.XAxis.Scale.MajorStep = pane3.XAxis.Scale.MajorStep = 50;PointPairList dummylist = new PointPairList();myCurve1 = pane1.AddCurve("Angle X", dummylist, Color.Red);myCurve2 = pane2.AddCurve("Angle Y", dummylist, Color.Blue);//    myCurve3 = pane3.AddCurve("Angle Z", dummylist, Color.Green);myCurve1.Line.Width = myCurve2.Line.Width = 5;// = myCurve3.Line.Width = 5;myCurve1.Symbol.Size = myCurve2.Symbol.Size = 0;// = myCurve3.Symbol.Size = 0;// Refigure the axis ranges for the GraphPanesz1.AxisChange();// Layout the GraphPanes using a default Pane Layoutusing (Graphics g = this.CreateGraphics()){master.SetLayout(g, PaneLayout.SquareRowPreferred);//优先排成一列}}Int32 Ntimer = 0;private void timer1_Tick(object sender, EventArgs e){Ntimer++;IPointListEdit list2_1 = myCurve1.Points as IPointListEdit;list2_1.Add(Ntimer, 2);IPointListEdit list2_2 = myCurve2_1.Points as IPointListEdit;list2_2.Add(Ntimer, 1);Scale xScale = z1.GraphPane.XAxis.Scale;if (Ntimer > xScale.Max - xScale.MajorStep){xScale.Max = Ntimer + xScale.MajorStep;xScale.Min = xScale.Max - 500.0;}xScale = z2.GraphPane.XAxis.Scale;if (Ntimer > xScale.Max - xScale.MajorStep){xScale.Max = Ntimer + xScale.MajorStep;xScale.Min = xScale.Max - 500.0;}z1.AxisChange();z1.Invalidate();z2.AxisChange();z2.Invalidate();}LineItem myCurve2_1, myCurve2_2, myCurve2_3;private void GraphIt2(){MasterPane master = z2.MasterPane;master.PaneList.Clear();// Display the MasterPane Title, and set the outer margin to 10 pointsmaster.Title.IsVisible = true;master.Title.Text = "实时显示";master.Margin.All = 5;// Create some GraphPane's (normally you would add some curves tooGraphPane pane1 = new GraphPane();GraphPane pane2 = new GraphPane();GraphPane pane3 = new GraphPane();// Add all the GraphPanes to the MasterPanemaster.Add(pane1);// master.Add(pane2);//  master.Add(pane3);pane1.XAxis.Scale.MinorStep = pane2.XAxis.Scale.MinorStep = pane3.XAxis.Scale.MinorStep = 1;pane1.XAxis.Scale.MajorStep = pane2.XAxis.Scale.MajorStep = pane3.XAxis.Scale.MajorStep = 50;PointPairList dummylist = new PointPairList();myCurve2_1 = pane1.AddCurve("Angle X", dummylist, Color.Red);myCurve2_2 = pane2.AddCurve("Angle Y", dummylist, Color.Blue);//    myCurve3 = pane3.AddCurve("Angle Z", dummylist, Color.Green);myCurve2_1.Line.Width = myCurve2_2.Line.Width = 5;// = myCurve3.Line.Width = 5;myCurve2_1.Symbol.Size = myCurve2_2.Symbol.Size = 0;// = myCurve3.Symbol.Size = 0;// Refigure the axis ranges for the GraphPanesz2.AxisChange();// Layout the GraphPanes using a default Pane Layoutusing (Graphics g = this.CreateGraphics()){master.SetLayout(g, PaneLayout.SquareRowPreferred);//优先排成一列}}}

博主主要想说的是。当数据量大的时候,曲线更新快会导致界面卡死的现象。这是由于更新太耗时导致的。

作为一个小白,网上搜索了大量资料,最后发现解决方式有两个1、BackgroundWorker  异步更新

2、创建新的线程  单独去更新  就可以解决了。

博主最后使用了接收can报文 10ms周期, 每周期4个报文,运行半天,没有出现异常

 


http://chatgpt.dhexx.cn/article/hFp0t5uZ.shtml

相关文章

ZedGraph 官网下载和帮助文档ZedGraph.chm

ZedGraph介绍 ZedGraph是用C#编写的.NET的类库控件,可用于绘制曲线图、饼图、柱状图、股票K线图等,功能非常强大。 1、ZedGraph的官网是: https://sourceforge.net/projects/zedgraph/ 2、ZedGraph.CHM帮助文档 官网的链接: htt…

graphviz简介

前几天去杨瑞那儿玩,他向我介绍了一个叫graphviz的工具,回来之后试用了一下,觉得真的是很好很强大。下面简单的介绍一下这个工具。 graphviz是贝尔实验室设计的一个开源的画图工具,它的强大主要体现在“所思即所得"&#xff…

zedgraph控件使用

最近做一个上位机的项目,要求实时显示温度曲线,开始用.net自带的 chart控做的,在动态显示那块,在删除一个数据点、加入一个新的数据点的时候,新的数据点显示不出来;纠结好久,解决不了这个问题。…

ZedGraph控件常用方法和属性总结

最近在WPF使用ZedGraph控件,发现这个控件的功能很强大,据说采用了双缓冲机制来绘制图,只要控制好显示的帧速,能够显示速度较快的动态图。 参考:https://blog.csdn.net/qq_26093511/article/details/51329059 1、常用…

ZedGraph设置刻度轴的颜色、刻度文本颜色以及网格线的颜色

1 刻度轴的设置 本小节介绍 如何设置刻度的颜色、长度、生长方向以及将正上方的刻度隐藏掉,还有设置刻度文本的颜色Scale.FontSpec.FontColor。 Color axisColor Color.FromArgb(150, 150, 150);#region X轴//设置主刻度的长度this.zedGraph.GraphPane.XAxis.Majo…

ZedGraph 总论

ZedGraph 总论 ZedGraph 是一个开源的.NET图表类库, 并且全部代码都是用C#开发的。它可以利用任意的数据集合创建2D的线性和柱形图表。 ZedGraph的类库具有很高的灵活性。几乎图表的每个层面都可以被用户修改。同时,为了保证类库的易用性,所…

ZedGraph做统计

下载ZedGraph.dll,在工具箱添加 ,然后将空间拖入界面,, ZedGraph.dll下载地址 : http://download.csdn.net/detail/happy09li/4276410 参考资料 点击打开链接 private void Form9_Load(object sender, EventArgs e){DataTable …

ZedGraph使用(一) 柱形图

ZedGraph使用(一) 柱形图 作者:Kevin 日期: 2008-12-04 QQ:475762235 关键字:ZedGraph、柱形图、统计图、C#、绘图、绘图控件、WebFrom 内容摘要: ZedGraph是一个开源的控件,提供了用户控件和…

ZedGraph绘图

一、下载及配置 下载ZedGraph 官网下载地址 http://sourceforge.net/projects/zedgraph/files/ 添加 ZedGraph.dll 和ZedGraph.Web.dll的引用 在控件库中添加ZedGraph控件 右键点击工具箱 - 选择项 - .Net Framework 组件 - 浏览 - 找到ZedGraph.dll 和ZedGraph.Web.d…

ZedGraph类库之基本教程篇

第一部分:基本教程篇 ZedGraphDemo中一共有9个基本教程的例子。其中大部分都类似,我会讲解其中一些比较典型的例子。把ZedGraph类库的使用逐步展现给大家。 第一节: InitialSampleDemo.cs这个文件 http://blog.csdn.net/tjvictor/archive/20…

ZedGraph使用经验

ZedGraph资源 ZedGraph来源:http://sourceforge.net/project/showfiles.php?group_id114675 ZedGraph 相关例子资源:http://zedgraph.org/wiki/index.php?titleSample_Graphs ZedGraph的特点: 第一,可以先生成图片后再显示&…

C#zegraph用法

一、引用using ZedGraph; 在资源管理器中点击引用,将ZedGraph.dll添加到工程项目中。 二、添加zedGraphControl控件 在工具箱的常规项目右击添加选择项,浏览zedgraph.dll 二、基本图、直方图、折线图、圆饼图 三、zedgraph相关属性 classDescrip…

ZedGraph 绘制动态曲线

文章目录 前言:开发环境:1 下载ZedGraph 控件并设置图形界面2 功能实现3 需求升级4 小结 话不多数,先上一个效果图: 前言: 需要采集一些设备的数据以图表的形式展示出来,研究数据的走向是否平稳&#xff0…

ZedGraph如何显示鼠标附近的曲线的点?介绍三种方法

使用ZedGraph绘制曲线图的时候,不仅仅是看曲线的走向,也需要查看曲线上某位位置处采集到的数据是多少。下面介绍三种方法,从简单到复杂。 文章目录 1、使用自带的功能显示点的坐标2、 多条曲线的坐标点同时显示3、 多条曲线的坐标点同时显示…

开源框架ZedGraph的使用

.Net的绘图控件ZedGraph的使用 ZedGraph 是一个开源的.NET图表类库, 全部代码都是用C#开发的。它可以利用任意的数据集合创建2D的线性和柱形图表 我们一般不直接使用ZedGraphControl对象,而是使用它的面板对象来进行操作,这里我们将它的面板…

redis解决高并发问题,如商品秒杀

redis真的是一个很好的技术,它可以很好的在一定程度上解决网站一瞬间的并发量,例如商品抢购秒杀等活动。。。 redis之所以能解决高并发的原因是它可以直接访问内存,而以往我们用的是数据库(硬盘),提高了访问效率,解决了数据库服务器压力。 …

Redis的高并发场景解决方案

1.Redis的信息 (1)单线程容易实现。 (2)效率高轻松处理每秒几十万数据(因为是占内存的所以CPU不是瓶颈)。 (3)支持数据类型多(String,List,has…

java如何解决高并发问题_java怎么处理高并发?

java处理高并发的方法:1、优化代码,减少不必要的资源浪费;2、把图片与页面进行分离,将图片放到独立的图片服器;3、使用缓存,可以大量减少与数据库的交互,提高性能;4、使用数据库集群;5、进行DB优化;6、硬件上做到负载均衡等等。 java处理高并发的方法: 1、从最基础的…

flask 多进程/多线程 解决高并发问题

1、简介: Flask 默认是单进程,单线程阻塞的任务模式,在项目上线的时候可以通过nginxgunicorn 的方式部署flask任务。 app.run()中可以接受两个参数,分别是threaded和processes,用于开启线程支持和进程支持。 1.thre…

高并发超卖问题简要解决方案

1、传统通过数据库保证不超卖 事务行锁并不是解决超卖的方案,只是保障数据的统一性。传统通过回滚事务的方式防止某些用户多卖的情况。 采用新建一个防重表事务的方式防止超卖。同一事务中,采用如 用户ID商品ID 的方式作为防重表唯一索引字段的数值&…