📜  使用 PyQtGraph 绘制带有时间戳的数据(1)

📅  最后修改于: 2023-12-03 15:06:50.109000             🧑  作者: Mango

使用 PyQtGraph 绘制带有时间戳的数据

PyQtGraph是一款基于Qt框架的高性能2D数据可视化库。它的主要特点是支持实时数据,并使用GPU进行硬件加速,因此非常适合用于科学计算和工业控制领域。在这里,我们将介绍如何使用PyQtGraph绘制带有时间戳的数据。

安装PyQtGraph

首先,我们需要安装PyQtGraph。可以使用pip命令进行安装:

pip install pyqtgraph
创建PyQtGraph应用程序

下面是一个简单的PyQtGraph应用程序的示例代码:

from pyqtgraph.Qt import QtGui, QtCore
import pyqtgraph as pg

# 创建应用程序
app = QtGui.QApplication([])
# 创建主窗口
win = pg.GraphicsWindow(title="PyQtGraph")
win.resize(800, 600)
# 添加绘图区域
plot = win.addPlot(title="实时数据")
# 显示窗口
win.show()

# 启动事件循环
QtGui.QApplication.instance().exec_()

该例子创建了一个PyQtGraph应用程序,主窗口中包含一个“实时数据”的绘图区域。启动应用程序后,可以看到一个空白的窗口。

绘制带有时间戳的数据

接下来,我们将使用PyQtGraph绘制一些带有时间戳的数据。以下是示例代码:

from pyqtgraph.Qt import QtGui, QtCore
import pyqtgraph as pg
import numpy as np
import time

# 创建应用程序
app = QtGui.QApplication([])
# 创建主窗口
win = pg.GraphicsWindow(title="PyQtGraph")
win.resize(800, 600)
# 添加绘图区域
plot = win.addPlot(title="实时数据")
# 创建数据曲线
curve = plot.plot()
# 设置x轴为时间戳形式
plot.setLabel('bottom', 'Time', units='s')

# 启动事件循环
QtGui.QApplication.instance().exec_()

# 初始化数据
data = np.zeros((100, 2))
ptr = 0
lastTime = time.time()

# 实时更新数据
while True:
    # 更新数据
    now = time.time()
    dt = now - lastTime
    lastTime = now
    data[ptr, 0] = now
    data[ptr, 1] = np.random.normal()
    ptr = (ptr + 1) % data.shape[0]
    # 绘制数据
    curve.setData(data=data[:, 0], y=data[:, 1])
    # 更新x轴范围
    plot.setXRange(now - 10, now)
    # 休眠一段时间
    time.sleep(0.05)

该例子创建了一个实时更新数据的应用程序。首先,创建了一个大小为100 x 2的数组data,并初始化为0。然后,使用while循环不断更新数据并绘制曲线。更新数据的过程如下:

  • 获取当前时间now和上次更新时间lastTime之间的差值dt。
  • 将当前时间now和随机数np.random.normal()存储至data数组中,其中第1列是时间戳,第2列是随机数。
  • 将指针ptr向前移动1位,如果超过数组最大长度,则回到0。
  • 休眠一段时间0.05秒(可以调整,例如0.01秒)。

绘制曲线的过程如下:

  • 设置数据曲线curve的数据为data数组的第1列和第2列。
  • 更新x轴范围为当前时间now减去10秒到当前时间now。

启动应用程序后,可以看到实时更新的曲线,横轴为时间轴,纵轴为随机数轴。随着时间推移,曲线不断更新,而横轴范围为最近10秒的时间范围。

总结

本文介绍了如何使用PyQtGraph绘制带有时间戳的数据。我们首先将PyQtGraph库安装至环境中,然后创建一个PyQtGraph应用程序。接着,我们使用numpy生成一些带有时间戳的随机数据,并使用PyQtGraph的plot函数将其显示在一个实时更新的曲线上。如果需要绘制其他类型的数据,只需修改数据生成的方式和绘图函数即可。