Python绘图库PyQtGraph的初步使用
简介和安装
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默认采用黑色背景的示波器风格界面,支持网格线、坐标轴标签等基本元素设置,是科学可视化和实时数据监控的理想选择。
更多推荐

所有评论(0)