背景
pyqtgraph是Python平台上一种功能强大的2D/3D绘图库,相对于matplotlib库,由于内部实现方式上,使用了高速计算的numpy信号处理库以及Qt的GraphicsView框架,因此,它在大数据量的数字处理和快速显示方面有着巨大的优势,它适合于需要快速绘图更新、视频或实时交互性的操作场合。另外,它不仅为各种数据提供了快速可交互式的图形显示,同时也提供了用于快速开发应用程序的各种小工具,如属性树、流程图等小部件,在数学、科学和工程领域都有着广泛的应用。
在使用pyqtgraph库绘制图形的编程方法上,前面一篇文章已经给了一个最简单的例子以及一个连续刷新波形图的例子,下面再给一个逐点刷新波形图的例子。在数据的可视化方面,对于逐点刷新的情况也是比较多的,如在温度采集的时候,可能需要采集到一个点就要实时显示一个点,而前面的点不能丢掉,当显示满一屏时,整个波形向左逐点推进,右侧再填充显示一个新的数据点,给人一种整幅图形是向左逐点移动的显示效果。
下面通过一个例子来演示使用pyqtgraph库实现逐点刷新显示的效果。
例子运行效果
先看一下程序的运行效果,如下图所示:
例子逐点产生正弦数据并画波形图,满屏数据200点,当超过200个点时,逐点左移推进显示。
实现代码
主要实现代码如下:
其基本思路是,在定时器中不断产生波形点数据放到动态数组中,达到逐点刷新波形的视觉效果。代码和上篇文章类似,分析如下:
1、第13行,创建应用程序实例app
2、第15-16行,使用python自带的array库产生动态数组data用以存储double类型的波形数据,N为一屏数据的点数
3、第17-19行,创建一个图形显示窗口win,设置窗口属性,如窗口标题、窗口大小等
4、第21-24行,在win上添加一个画图对象p,设置各种属性,如网格,X、Y轴范围、X、Y轴label及图形标题等
5、第26-27行,在p上创建1条黄色曲线curve,idx为产生正弦波形数据的变量
6、第29-39行,定时器超时函数plotData,内部不断产生一个正弦数据点tmp,当数据点数小于N时,data数组使用append动态添加tmp,否则,将tmp设为data的最后一个元素,前N-1个元素为上次数组中的最后N-1个数。使用setData函数更新curve的数据并刷新绘图
7、第41-43行,定义一个定时器timer,并连接超时函数plotData,每隔30ms刷新一次波形
8、第45行,使用app.exec_()函数运行实例,进入消息循环
备注
Pyqtgraph库自带了很多例子,可以查看其源码学到更多的东西。输入以下两行代码可以导入例子:
运行后,弹出如下图所示的例子演示程序:
左侧列表中显示了自带的各种例子,右侧显示了当前选中例子的源代码程序。如双击“Basic Plotting”,则会直接运行该程序,如下图所示:
欢迎加关注,共同交流。
领取专属 10元无门槛券
私享最新 技术干货