PyQtGraph 是一个基于 PyQt/PySide 的高性能科学绘图库,专为实时数据可视化和交互式图形设计而优化。其结合了 Qt 的 GUI 框架与 NumPy 的高效计算能力,在科学工程、医学影像、金融分析等领域广泛应用。以下是其核心内容与特性的系统解析:
一、核心优势
-
卓越的性能
示例:实时心电图监测、高频交易数据流。
基于 OpenGL 硬件加速和优化的绘图算法,PyQtGraph 处理百万级数据点时仍能保持流畅,速度远超 Matplotlib(可达数十倍)。 -
实时数据更新
支持动态刷新图表,无需重新绘制整个图像,适用于传感器数据流、实验实时监控等场景。python
# 实时更新曲线(每秒20帧以上) timer = QtCore.QTimer() timer.timeout.connect(update_data) # 更新数据函数 timer.start(50) # 每50ms刷新一次
-
深度交互功能
扩展功能:自定义 ROI(感兴趣区域)标注,用于图像分割或数据筛选。
内置缩放、平移、选区标记等交互工具,用户可直接通过鼠标操作探索数据细节。
二、安装与依赖
-
安装方式
bash
pip install pyqtgraph # 基础库 pip install pyqt5 # 或 pyside2(必须选择其一) pip install pyopengl # 启用3D绘图功能(可选)[6,7](@ref)
-
版本兼容性
- Python 3.7+
- 支持 PyQt5/PyQt6/PySide2 等 GUI 框架
三、核心功能详解
1. 基础绘图类型
- 折线图:适合时序数据展示(如温度变化)
python
plot = pg.plot(x, y, pen='b', symbol='o') # 蓝色曲线带圆点标记
- 散点图:用于分布分析(如聚类结果)
python
plot.plot(x, y, pen=None, symbolBrush=(255,0,0)) # 红色散点
- 柱状图:直观对比不同类别数据(如销售额统计)
python
bars = pg.BarGraphItem(x=x, height=y, width=0.6, brush='g')
2. 高级可视化
- 3D 图形:需配合 PyOpenGL 实现三维曲面、点云渲染
python
import pyqtgraph.opengl as gl surface = gl.GLSurfacePlotItem(z=z_data, shader='shaded')
- 图像处理:支持医学影像(MRI)、热力图显示
python
img = pg.ImageItem(image_data) # 二维数组直接渲染
3. 界面集成
- 嵌入 GUI 应用:作为部件嵌入 PyQt 窗口,构建数据仪表盘
python
class MainWindow(QtWidgets.QMainWindow): def __init__(self): super().__init__() self.plot_widget = pg.PlotWidget() # 创建绘图部件 self.setCentralWidget(self.plot_widget)
四、应用场景
-
科学研究
- 物理实验实时波形采集(如示波器模拟)
- 生物信号处理(EEG 脑电图分析)
-
工业监控
- 生产线传感器数据可视化(温度、压力动态曲线)
- 设备状态预警系统(阈值标记与报警提示)
-
金融分析
- 股票实时行情图表(K线图与成交量叠加)
- 高频交易策略回测可视化
五、进阶技巧
-
美化图表
- 自定义颜色与样式:
pen=pg.mkPen(color='r', width=2, style=QtCore.Qt.DashLine)
- 添加图例与注释:
plot.addLegend()
和TextItem
文本标注
- 自定义颜色与样式:
-
数据优化
- 使用
setData()
局部更新而非全量重绘,提升性能 - 大数据集下启用
useOpenGL=True
加速渲染
- 使用
-
调试工具
- 内置示例库快速学习:
pyqtgraph.examples.run()
- 控制台打印鼠标坐标:
plot.scene().sigMouseMoved.connect(mouse_handler)
- 内置示例库快速学习:
六、注意事项
-
依赖管理
- 确保安装兼容的 PyQt/PySide 版本(避免
DLL load
错误) - 3D 功能需额外安装
pyopengl
- 确保安装兼容的 PyQt/PySide 版本(避免
-
跨平台兼容
- Linux 下需配置 OpenGL 驱动支持
- Windows 打包时注意包含 Qt 动态链接库
PyQtGraph 通过其高效性、灵活性和易用性,成为科学可视化的首选工具。若需深入探索,可参考其官方文档及内置示例(通过 pyqtgraph.examples.run()
启动)。