Python 根据pyqtgraph.opengl中的信号值调整曲面打印项目的颜色

Python 根据pyqtgraph.opengl中的信号值调整曲面打印项目的颜色,python,opengl,pyqtgraph,Python,Opengl,Pyqtgraph,下面是一个瀑布表示法的尝试。 我需要用不同的颜色表示信号(阵列)值(振幅/电平/密度),而不是像这样用阴影表示。 由于我是一名算法和信号处理工程师,而不是一名软件开发人员,我不熟悉彩色地图和这些东西。如果有人能帮我把颜色和信号值联系起来 from pyqtgraph.Qt import QtCore, QtGui import pyqtgraph.opengl as gl import scipy.ndimage as ndi import numpy as np Nf = 90 #

下面是一个瀑布表示法的尝试。 我需要用不同的颜色表示信号(阵列)值(振幅/电平/密度),而不是像这样用阴影表示。 由于我是一名算法和信号处理工程师,而不是一名软件开发人员,我不熟悉彩色地图和这些东西。如果有人能帮我把颜色和信号值联系起来

from pyqtgraph.Qt import QtCore, QtGui
import pyqtgraph.opengl as gl
import scipy.ndimage as ndi
import numpy as np

Nf = 90     # No. of frames
Ns = 100    # Signal length

app = QtGui.QApplication([])

w_SA = QtGui.QWidget(); w_SA.setFixedSize(400, 400)

# Create a GL View widget to display data
plt_SA1 = gl.GLViewWidget(w_SA); plt_SA1.move(10, 10); plt_SA1.resize(380, 380)
plt_SA1.setCameraPosition(elevation=90.0, azimuth=0.0, distance=70)
p1 = gl.GLSurfacePlotItem(shader='shaded', color=(0.5, 0.5, 1, 1), smooth=False)
p1.translate(-Nf/2, -Ns/2, 0)
plt_SA1.addItem(p1)

Arx = np.zeros([Nf, Ns])
def update():
    global Arx
    Arx = np.roll(Arx, 1, axis=0)
    Arx[0] = ndi.gaussian_filter(np.random.normal(size=(1,Ns)), (1,1))
    p1.setData(z=Arx)
timer = QtCore.QTimer()
timer.timeout.connect(update)
timer.start(30)

w_SA.show()

if __name__ == '__main__':
    import sys
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
        QtGui.QApplication.instance().exec_()

你能更具体地描述一下你想要图像的颜色吗?如果您不需要OpenGL,这里有一个使用pyqtgraph.ImageView的更简单的解决方案。您可以右键单击右侧的渐变栏,以更改用于为图像着色的查找表。根据所需的效果,手动设置此表的方法也多种多样

from pyqtgraph.Qt import QtCore, QtGui
import pyqtgraph as pg
import scipy.ndimage as ndi
import numpy as np

Nf = 90     # No. of frames
Ns = 100    # Signal length

app = QtGui.QApplication([])

Arx = np.zeros([Nf, Ns])
win = pg.image(Arx)
win.view.setAspectLocked()
def update():
    global Arx
    Arx = np.roll(Arx, 1, axis=0)
    Arx[0] = ndi.gaussian_filter(np.random.normal(size=(1,Ns)), (1, 1))
    win.setImage(Arx.T, autoRange=False)

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

if __name__ == '__main__':
    import sys
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
        QtGui.QApplication.instance().exec_()

嗯,非常感谢。这个表示非常接近我所需要的。您发布的代码正在运行,但是:1。我得到以下错误:“gcc”未被识别为内部或外部命令、可操作程序或批处理文件。构建msvcr库:“C:\Python27\libs\libmsvcr90.a”(来自C:\Windows\winsxs\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.21022.8_none_bcb86ed6ac711f91\msvcr90.dll)2。运行需要时间(~10秒),这将影响我的应用程序,因为我正在获取在线数据。如何将此图嵌入我的QtGui.QWidget?谢谢。“gcc”错误可以忽略,或使用
pg.setConfigOptions(useWeave=False)
2禁用。10秒到底要花多少时间?3.pg.image()和pg.plot()都返回可以添加到GUI中的小部件,就像其他小部件一样。另见:1。使用“pg.setConfigOptions(useWeave=False)”时,会出现以下错误:“setConfigOption()获取了意外的关键字参数‘useWeave’”。因此,“gcc”错误仍然存在。2.10秒用于窗口显示,即它仅在白色窗口中停留>10秒。此外,应用程序停止获取信号,就像应用程序挂起一样。3.此外,如果我尝试使用norm或ROI中的任何控件。应用程序崩溃,我必须关闭它,然后重新运行。1。请注意设置配置选项!=设置配置选项。2.我建议您分析一下,看看是什么花费了这么长的时间(如果是pyqtgraph中的某个内容,请打开一个新问题)。3.崩溃应在pyqtgraph邮件列表中报告。