gpt4 book ai didi

python - Pyqtgraph & 根据曲面图的高度更改颜色

转载 作者:行者123 更新时间:2023-12-01 01:53:06 31 4
gpt4 key购买 nike

我正在寻找一种方法使我的曲面图项目根据高度改变颜色。以下是我当前的方法:

def __init__(self, s):

self.traces = dict()
self.app = QtGui.QApplication(sys.argv)
self.w = gl.GLViewWidget()
self.w.opts['distance'] = 2000
self.w.setWindowTitle('pyqtgraph example: GLLinePlotItem')
self.w.setGeometry(0, 0, 600, 600)
self.w.show()
self.socket = s

self.timer = QtCore.QTimer()
self.timer.setInterval(1) # in milliseconds
self.timer.start()
self.timer.timeout.connect(self.onNewData)

# create the background grids
#gx is the y grid
#gz is the x gid
gx = gl.GLGridItem()
gx.rotate(90, 0, 1, 0)
gx.translate(0, 0, 0)
self.w.addItem(gx)
gz = gl.GLGridItem()
gz.translate(200, 0, -500)
self.w.addItem(gz)
gx.scale(100, 10, 100)
gz.scale(20, 10, 100)


self.y = np.linspace(0, 100, 10)
self.x = np.linspace(60,400, 708)
temp_z = np.zeros((10,708))
self.surf = gl.GLSurfacePlotItem(x=self.y, y=self.x, z=temp_z, shader='heightColor',
computeNormals=False, smooth=False)
self.surf.scale(3,1,1)
self.surf.shader()['colorMap'] = np.array([0.7, 2, 0.5, 0.2, 0.7, 0.7, 0.2, 0, 2])
self.w.addItem(self.surf)

但是这个方法效果并不好。当 Z 值变得非常高时,表面会变得完全白色。顺便说一句,我不知道我在用颜色图做什么,我只是把它从示例中删除了。

最佳答案

我建议您使用GLSurfacePlotItemcolors选项。这个想法是计算与表面的 z 值(高度)相关的颜色并使它们标准化(在 0 和 1 之间)。有了这个,您可以使用例如 matlotlibcmap 计算表面每个点的颜色。

# -*- coding: utf-8 -*-
from __future__ import print_function, absolute_import
from pyqtgraph.Qt import QtCore, QtGui
import pyqtgraph as pg
import pyqtgraph.opengl as gl
import matplotlib.pyplot as plt
import numpy as np
import os
from PyQt4.QtGui import QFileDialog
import sys

if not( 'app' in locals()):
app = QtGui.QApplication([])

traces = dict()
# app = QtGui.QApplication(sys.argv)
w = gl.GLViewWidget()
w.opts['distance'] = 2000
w.setWindowTitle('pyqtgraph example: GLLinePlotItem')
w.setGeometry(0, 0, 600, 600)
w.show()
# socket = s

# timer = QtCore.QTimer()
# timer.setInterval(1) # in milliseconds
# timer.start()
# timer.timeout.connect(onNewData)

# create the background grids
#gx is the y grid
#gz is the x gid
gx = gl.GLGridItem()
gx.rotate(90, 0, 1, 0)
gx.translate(0, 0, 0)
w.addItem(gx)
gz = gl.GLGridItem()
gz.translate(200, 0, -500)
w.addItem(gz)
gx.scale(100, 10, 100)
gz.scale(20, 10, 100)


y = np.linspace(0, 100, 10)
print(y)
x = np.linspace(0,100, 10)
print(x)
temp_z = np.random.rand(len(x),len(y))*100.

cmap = plt.get_cmap('jet')

minZ=np.min(temp_z)
maxZ=np.max(temp_z)
rgba_img = cmap((temp_z-minZ)/(maxZ -minZ))


surf = gl.GLSurfacePlotItem(x=y, y=x, z=temp_z, colors = rgba_img )

surf.scale(3,1,1)
# surf.shader()['colorMap'] = np.array(list(np.linspace(-100, 100, 1000)))
w.addItem(surf)

if __name__ == '__main__':
import sys

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

给出:

enter image description here

关于python - Pyqtgraph & 根据曲面图的高度更改颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50529448/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com