离线
|
仅作为操作记录。
用pyqtgraph,感谢我的大佬同学。
可以做出这样的动态图:
坐标轴也能跟着动
步骤
1、安装pyqtgraph。博主打开anaconda,
2、博主新建.py文件,输入代码:(可直接运行)
- import pyqtgraph as pg
- from pyqtgraph.Qt import QtCore, QtGui
- import numpy as np
- win = pg.GraphicsLayoutWidget(show=True)
- win.setWindowTitle('pyqtgraph example: Scrolling Plots')
- p2 = win.addPlot()
- data1 = np.random.normal(size=300)
- curve2 = p2.plot(data1)
- ptr1 = 0
- def update1():
- global data1, ptr1
- data1[:-1] = data1[1:] # shift data in the array one sample left
- data1[-1] = np.random.normal()
- ptr1 += 1
- curve2.setData(data1)
- curve2.setPos(ptr1, 0)
- timer = pg.QtCore.QTimer()
- timer.timeout.connect(update1)
- timer.start(50)
- if __name__ == '__main__':
- import sys
- if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
- QtGui.QApplication.instance().exec_()
复制代码 方式
先win的plot画出序列的一个图;
取序列第二到最后的数据(去除第一个数据),再加上(update函数里)一个新值,作为新的序列,再画出。画出的同时也同样的方式更新横坐标,从第二个开始,增加一个(是之前最后一个值+1)
关键:pyqtgraph画图时可以不用plot的show,而直接显示;(plot的show会中止程序运行)
pyqtgraph有定时器,可以返回更新要画出的数据。
main函数里只需直接调用
——————————————————————————————————————————
要想让串口接收到的数据这样实时显示,只需把下面这个位置-换成串口接收到的数据——前提是保证串口一次接收到的数据是一个
(如果串口一次接收到的数据是多个的话,需要对python的update1程序改变,比如不从第二个数作为新序列的起始点,可能是第5个、第6个……看串口一次接收到的数据的个数了;同时要增补的新值也不止一个了,data1[-1]可能要变成data1[-3]=……;data1[-2]=……;data1[-1]=……)
————————————————————————————————————
备注:
实时显示波形动图的方式还有matplotlib的animation(参考博主博文——传送门)
- ani = animation.FuncAnimation(fig, run, data_gen, blit=False, interval=10,
- repeat=False, init_func=init)
复制代码 或者使用线程(这个博主还没做出),线程可参考博主的文章
python上手线程——建立和使用
还有一种是使用
- import matplotlib.pyplot as plt
- plt.ion()
复制代码 传送门 |
|