TG-PlatformPlus/UserScripts/Plotting.py

73 lines
2.5 KiB
Python
Raw Permalink Normal View History

2026-03-02 14:29:58 +08:00
"""
This example demonstrates many of the 2D plotting capabilities
in pyqtgraph. All of the plots may be panned/scaled by dragging with
the left/right mouse buttons. Right click on any plot to show a context menu.
"""
import serial, struct
import numpy as np
import pyqtgraph as pg
from pyqtgraph.Qt import QtCore
if __name__ == '__main__':
ser = serial.Serial("COM2", 115200, timeout=250) # 打开COM17将波特率配置为115200其余参数使用默认值
if ser.isOpen(): # 判断串口是否成功打开
print("打开串口成功。")
# print(ser.name) # 输出串口号
else:
print("打开串口失败。")
app = pg.mkQApp("Plotting Example")
#mw = QtWidgets.QMainwin1dow()
#mw.resize(800,800)
win1 = pg.GraphicsLayoutWidget(show=True, title="Basic plotting examples")
win1.resize(1000,600)
win1.setWindowTitle('pyqtgraph example: Plotting1')
# Enable antialiasing for prettier plots
pg.setConfigOptions(antialias=True)
win1.nextRow()
win1.nextCol()
p6 = win1.addPlot(title="Updating plot")
curve = p6.plot(pen=None, symbolBrush=(255,0,0), symbolPen='w', col=3, row=3,rowspan=2, colspan=5)
lr = pg.LinearRegionItem([400,700])
lr.setZValue(-10)
p6.addItem(lr)
data = np.zeros(1024)
# points = int(np.random.random()*1024)
points = bytearray()
ptr = 0
def update():
global curve, data, ptr, p6, ser, points
points += ser.read_all()
if len(points) > 2:
for i in range(len(points)//2):
data[struct.unpack('>H', points[2*i:2*i+2])[0]>>6] += 1
points = points[2*int(len(points)/2):]
curve.setData(data)
if ptr == 0:
p6.enableAutoRange('xy', True) ## stop auto-scaling after the first data set is plotted
ptr += 1
timer = QtCore.QTimer()
timer.timeout.connect(update)
timer.start(250)
win1.nextCol()
win1.nextRow()
p9 = win1.addPlot(title="Zoom on selected region", col=1, row=3,rowspan=3, colspan=1)
p9.plot(data, symbolBrush=(255,0,0), symbolPen='w')
def updatePlot():
p9.setXRange(*lr.getRegion(), padding=0)
def updateRegion():
lr.setRegion(p9.getViewBox().viewRange()[0])
lr.sigRegionChanged.connect(updatePlot)
p9.sigXRangeChanged.connect(updateRegion)
updatePlot()
# win2 = pg.GraphicsLayoutWidget(show=True, title="Basic plotting examples")
# win2.resize(1000,600)
# win2.setWindowTitle('pyqtgraph example: Plotting')
pg.exec()
ser.close()