PyQtGraph是否有类似matplotlib.pyplot.streamplot的函数?
在PyQtGraph UI中叠加流线图的实现方案
不用纠结pyplot的兼容问题,PyQtGraph本身就内置了专门的StreamLinePlotItem组件,直接就能在现有UI的绘图组件上叠加流线图,完全适配PyQtGraph的生态。
核心实现步骤
- 准备你的速度场数据(u、v分量,对应x、y方向的流速)
- 在PyQtGraph的
PlotWidget中先添加你的基础数据分析图层(比如热力图、散点图等) - 实例化
StreamLinePlotItem,传入速度场数据,设置样式后添加到PlotWidget即可完成叠加
完整代码示例
import sys import numpy as np import pyqtgraph as pg from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget class DataAnalysisUI(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("PyQtGraph 流线图叠加") self.central_widget = QWidget() self.setCentralWidget(self.central_widget) self.layout = QVBoxLayout(self.central_widget) # 初始化绘图组件 self.plot_widget = pg.PlotWidget() self.layout.addWidget(self.plot_widget) # ---------------------- # 替换为你的实际数据 # ---------------------- # 生成模拟网格与速度场数据 x, y = np.meshgrid(np.linspace(-5, 5, 100), np.linspace(-5, 5, 100)) u = -1 - x**2 + y v = 1 + x - y**2 # 生成背景分析图(比如速度幅值热力图) magnitude = np.sqrt(u**2 + v**2) # 添加背景图层 image_item = pg.ImageItem(magnitude) self.plot_widget.addItem(image_item) # 匹配数据坐标范围 self.plot_widget.setRange(xRange=[0, 100], yRange=[0, 100]) # 添加流线图 streamline_item = pg.StreamLinePlotItem() # 配置流线样式:白色线条、宽度1,密度1.5(值越大流线越密) streamline_item.setData(u=u, v=v, x=x, y=y, pen=pg.mkPen(color='white', width=1), density=1.5) self.plot_widget.addItem(streamline_item) if __name__ == "__main__": app = QApplication(sys.argv) window = DataAnalysisUI() window.show() sys.exit(app.exec_())
关键参数调整
density:控制流线的密度,数值越大,生成的流线越多pen:自定义流线的颜色、宽度、样式(比如pg.mkPen(color='#FF0000', width=2, style=Qt.DashLine))- 数据维度:确保u、v的数组维度与x、y的网格维度完全匹配,否则会报错
内容的提问来源于stack exchange,提问作者ahermann
相关产品推荐
相关产品推荐

