简介和安装

PyQtGraph顾名思义,是基于PyQt的可视化图形库,据说比matplotlib快100倍,适合动态数据流显示,支持pip和conda安装

方案
pip pip install pyqtgraph
conda conda install -c conda-forge pyqtgraph

PyQtGraph提供了超多示例,可通过如下代码打开示例程序。

import pyqtgraph.examples
pyqtgraph.examples.run()

需要说明的是,PyQtGraph和PyQt并不是同一个开发者,只是对PyQt的深度定制。但对于PyQt技术栈来说,如果想嵌入高帧率交互的二维图像,PyQtGraph仍是首选。至于三维绘图,由于PyQtGraph基于老旧的opengl,故而官方不推荐用于新项目或复杂场景,但作为轻量级快速原型仍可用。

简单示例

安装完成后,简单绘制一个正弦波 y = sin ⁡ x y=\sin x y=sinx,示例如下,黑屏示波器风格还是挺Geek的。

在这里插入图片描述

绘图代码为

import pyqtgraph as pg
import numpy as np

x = np.linspace(0, 10, 1000)
y = np.sin(x)
pg.plot(x,y)

上述代码相当简洁,只需输入数据就可以,PyQtGraph会自动弹出图窗。为了理解PyQtGraph的操作逻辑,下面绘制一个更加完整的示例

在这里插入图片描述

代码如下

app = pg.mkQApp()
win = pg.plot(title='实时正弦波')
win.setLabel('left', 'Amplitude')
win.setLabel('bottom', 'Time')
curve = win.plot(x, y, pen='b')

代码中,【setLabel】用于设置图像标签,并根据left, bottom指明标签位置。

从以上代码可知,PyQtGraph的使用逻辑与PyQt相似,先创建一个app,然后在app中添加一个绘图窗口,最后调用绘图窗口中的绘图函数,完成图像绘制。这和matplotlib的思路略有差别,matplotlib是先把图像画在内存里,最后plt.imshow弹出图窗。

动态绘图

PyQtGraph主打的就是高性能快速绘图,如下图所示

在这里插入图片描述

代码如下

import sys
import numpy as np
import pyqtgraph as pg
from pyqtgraph.Qt import QtCore

app = pg.mkQApp("动态正弦波")
win = pg.plot(title='动态正弦波', labels={'left': '幅值', 'bottom': '相位'})
win.setYRange(-1.2, 1.2)
win.showGrid(x=True, y=True, alpha=0.3)

x = np.linspace(0, 4 * np.pi, 500)
curve = win.plot(x, np.sin(x), pen=pg.mkPen('b', width=2))

phase = [0.0]

def update():
    phase[0] += 0.15
    curve.setData(y=np.sin(x - phase[0]))

timer = QtCore.QTimer()
timer.timeout.connect(update)
timer.start(30)

if __name__ == '__main__':
    sys.exit(app.exec())

上述代码中,用Qt的Timer来实时更新相位,使得正弦波在窗口中丝滑地移动。

小结

PyQtGraph是一个基于PyQt的高性能可视化库,相比matplotlib速度更快,适合动态数据展示。支持pip和conda安装,提供丰富的示例程序。基本绘图只需几行代码即可完成,采用类似PyQt的窗口操作逻辑。其动态绘图功能尤为出色,通过Qt定时器可实现流畅的实时数据更新。PyQtGraph默认采用黑色背景的示波器风格界面,支持网格线、坐标轴标签等基本元素设置,是科学可视化和实时数据监控的理想选择。

更多推荐