PYQT5+pyqtgraph 2d绘图实时刷新(坐标系跟着曲线一起移动,且可以查看绘制历史)的解决方法

PYQT5+pyqtgraph 2d绘图实时刷新(坐标系跟着曲线一起移动,且可以查看绘制历史)的解决方法


PYQT5中使用pyqtgraph绘制实时2d曲线图时,希望坐标轴随着曲线一起移动,并可以查看历史绘制的曲线,官方demo有移动坐标轴的案例,但是不可拖动查看历史图像。

效果图

坐标系跟随绘制的线动


一、原理

pyqtgraph中有一个用于定位坐标长度的函数

tdplot.setXRange(0 , 200)

如这个函数,我设置了x轴为0-200.
那么要想实时跟随绘制的曲线,我的解决思路就是实时刷新这个函数到自己想要的数据对应的坐标轴上。

二、代码思路

1.引入变量i来记录每一次更新

每当有新的数据需要绘制时,就令 i 自增1,以此来达到记录数据个数的目的,当然也可以使用len(x)来运算得到。

2.固定坐标轴大小,并实时更新

设置一个需要的坐标长度xrange
我们肯定需要一个固定现实的坐标轴,那么只要使用上面提到的函数即可固定到坐标轴。
代码如下:

if i > xrange:
      tdplot.setXRange(self.i - xrange, self.i)

if语句用于判断从0开始绘制的图像是否超过我们需要的坐标轴长度(图像是否到达最左边),如果超过,则会实时更新坐标轴


3缺点

当然这个方案不会十分完美,缺点就是在绘制时无法移动坐标轴,因为它每次数据更新都会回到当前坐标轴上,我的解决办法是:绘制时失能鼠标控制,当停止绘制时恢复鼠标控制。
代码如下:

tdplot.setMouseEnabled(x=True, y=False) # 启用x轴控制,失能y轴控制
tdplot.setMouseEnabled(x=False, y=False) # 鼠标xy都不能划动

总结

这个方案并不完美,也许您有需要在绘图过程中缩放的需求,我的建议是新增两个按钮来实现缩放功能,所使用的函数还是坐标设置函数,在其中添加一个比例变量即可。
本人技术有限,此方案并非完美,仅作为自己技术参考


荣书记嘎嘎乱杀

  • 5
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
要利用PyQt5的PyQtGraph绘制不断更新的数值单条曲线,可以使用QTimer来定时更新曲线数据,并使用plot函数来绘制曲线。下面是一个简单的示例代码: ```python import sys from PyQt5.QtGui import * from PyQt5.QtCore import * from PyQt5.QtWidgets import * import pyqtgraph as pg import random class PlotWindow(QWidget): def __init__(self): super().__init__() self.setWindowTitle('Plot Window') self.setGeometry(100, 100, 800, 600) self.plot = pg.PlotWidget(self) self.plot.setGeometry(50, 50, 700, 500) self.x_data = [] self.y_data = [] self.timer = QTimer() self.timer.timeout.connect(self.update_plot) self.timer.start(1000) # 1秒钟更新一次 def update_plot(self): self.x_data.append(len(self.x_data)) self.y_data.append(random.randint(0, 100)) self.plot.plot(self.x_data, self.y_data, pen='r') if __name__ == '__main__': app = QApplication(sys.argv) window = PlotWindow() window.show() sys.exit(app.exec_()) ``` 在这个示例代码中,我们创建了一个`PlotWindow`类,该类继承自QWidget。在`PlotWindow`的构造函数中,我们创建了一个`PlotWidget`对象,并设置了其大小和位置。我们还创建了两个空列表`x_data`和`y_data`用于存储曲线的数据。 我们使用了QTimer来定时更新曲线数据。在`update_plot`函数中,我们向`x_data`列表中添加一个新的数据点,该数据点的值为当前`x_data`列表的长度。我们还向`y_data`列表中添加一个随机整数。然后,我们使用`plot`函数绘制曲线,将`x_data`和`y_data`作为参数传递给`plot`函数,并指定曲线的颜色为红色。 最后,我们在`main`函数中创建了一个`QApplication`对象和一个`PlotWindow`对象,然后显示窗口并启动应用程序的事件循环。 这样,我们就可以利用PyQt5的PyQtGraph绘制不断更新的数值单条曲线了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值