pyqtgraph 教程
简介
PyQtGraph 是一个用于科学和工程数据可视化的开源库,基于 PyQt 和 NumPy 构建而成。它提供了丰富的绘图工具和交互功能,可以用于创建高性能的实时数据图表、图像显示和信号处理应用。
以下是 PyQtGraph 的一些特点和功能:
- 快速绘图:PyQtGraph 使用了基于 GPU 的绘图和渲染技术,能够快速处理大量数据并实时更新图形界面。它通过使用 NumPy 数组和 OpenGL 加速来实现高性能的绘图。
- 多种绘图类型:PyQtGraph 支持各种绘图类型,包括曲线图、散点图、直方图、表面图、等值线图等。它提供了灵活的绘图选项和定制能力,可以创建多种类型的图表。
- 实时数据可视化:PyQtGraph 的设计目标之一是实时数据可视化。它可以高效地处理实时数据流,并实时更新图表。这使得 PyQtGraph 在需要实时监测和可视化数据的应用中非常有用。
- 交互功能:PyQtGraph 提供了丰富的交互功能,例如缩放、平移、选取、标记和测量等。这些功能使用户能够与图表进行交互,并通过交互方式进行数据分析和探索。
- 多平台支持:PyQtGraph 基于 PyQt 库,因此可以在多个平台上运行,包括 Windows、Mac 和 Linux。它与 PyQt 的良好集成性确保了在 PyQtGraph 中能够利用 PyQt 的全部功能。
- 易于使用:PyQtGraph 具有简单、直观的 API 接口,易于上手和使用。它提供了丰富的示例和文档,使开发人员能够快速上手并构建复杂的数据可视化应用。
总体而言,PyQtGraph 是一个功能强大、高性能且易于使用的科学数据可视化库。它适用于需要处理大量数据、实时更新图表和进行交互分析的科学和工程应用。无论是快速绘制实时数据、创建复杂的图表还是进行交互式数据分析,PyQtGraph 都提供了丰富的功能和工具来满足需求。
pyqtgraph 安装
pyqtgraph 需要配合 PyQt5
使用,这些都要预先安装好,在此只描述 pyqtgraph 相关:
pip install pyqtgraph
pyqtgraph 实例全集
官方专门给出了一个实例集合,包含了展示与源码,非常方便学习,通过以下代码来运行:
import pyqtgraph.examples
pyqtgraph.examples.run()
特别提醒:运行此命令时需要在python模块的所在目录下一般为 site-packages 目录。
设置画笔
#!/usr/bin/env python
import pyqtgraph as pg
from pyqtgraph.Qt import QtWidgets
# 设置背景色为白色
pg.setConfigOption('background', 'w')
# 创建一个窗口
app = QtWidgets.QApplication([])
win = QtWidgets.QMainWindow()
win.setWindowTitle('pyqtgraph example: Auto Fill Window')
# 创建一个画布
plot_widget = pg.PlotWidget()
curve = plot_widget.plot([1, 3, 2, 4])# 在画布上绘制一个简单的曲线
# 设置 线条绘制笔
pen = pg.mkPen(color='red', width=2)
pen = pg.mkPen(color=(255, 0, 0, 128), width=2) # 设置颜色的RGBA值,其中128表示50%的透明度
curve.setPen(pen)
# 设置画布为窗口的中心项
win.setCentralWidget(plot_widget)
# 定义窗口大小变化的回调函数
def onResize(event):
# 自动调整画布大小以填充整个窗口
plot_widget.setGeometry(win.centralWidget().geometry())
# 将回调函数连接到窗口的resize事件
win.resizeEvent = onResize
# 显示窗口
win.show()
# 运行pyqtgraph事件循环
app.exec()
设置渐变映射图
由于pyqtgraph
调整窗口大小后,灰度图会变成渐变灰色样式,为了保持原来的颜色映射设置,绑定了窗口大小变化的回调函数 onResize
。
import pyqtgraph as pg
from pyqtgraph.Qt import QtGui
# 创建图片类对象
img = pg.ImageItem() #
# 设置数据
img.setImage(data)
# 设置
img.setOpts(autoRange=False)
img.setRect(QtCore.QRectF(0, 0, data.shape[1], data.shape[0]))
img.setAutoDownsample(False)
# 定义窗口大小变化的回调函数
def onResize(event):
# 创建自定义颜色映射
img.setLookupTable(lut)
# 创建自定义颜色映射
color_map = pg.ColorMap(
pos=np.array([0.0, 0.5, 0.5, 1.0]),
color=np.array([[255, 255, 0, 255], [255, 0, 0, 255], [255, 255, 0, 255], [255, 255, 255, 255]])
)
# 获取颜色映射的查找表
lut = color_map.getLookupTable(nPts=256)
vmin, vmax = np.sort(data.flatten())[int(data.shape[0]*
data.shape[1]/50)], np.sort(data.flatten())[int
(data.shape[0]*data.shape[1]/50*49)]
win.resizeEvent = onResize
win.show()
img.setLookupTable(lut)
## 设置初始 的 灰度范围值
hist.setLevels(vmin, vmax)
tr = QtGui.QTransform()
img.setTransform(tr.scale(1/2048, 0.1220703125).translate(0,1000/0.1220703125))