用颜色显示 3D 矩阵 Pyqtgraph

问题描述 投票:0回答:1

我想使用 GLVolumeItem (带有 x、y 和 z 轴)在 Pyqtgraph 中显示 3D 矩阵,并具有与输入数据相对应的特定颜色。

我该如何继续使用我的代码?

import numpy as np

import pyqtgraph as pg
import pyqtgraph.opengl as gl
from pyqtgraph import functions as fn

app = pg.mkQApp("GLVolumeItem Example")
w = gl.GLViewWidget()
w.show()
w.setWindowTitle('pyqtgraph example: GLVolumeItem')
w.setCameraPosition(distance=200)

g = gl.GLGridItem()
g.scale(10, 10, 1)
w.addItem(g)

x = np.linspace(0,10,11)
y = np.linspace(0,10,11)
z = np.linspace(0,10,11)

data = np.zeros((10,10,10))
data[1,:,:] = 10
data[3,:,:] = 10

d2 = np.empty(data.shape + (4,), dtype=np.ubyte)

v = gl.GLVolumeItem(d2)
w.addItem(v)

ax = gl.GLAxisItem()
w.addItem(ax)

if __name__ == '__main__':
    pg.exec()

目标是获得与数据级别相对应的不同颜色的 3D 表示。

python pyqtgraph
1个回答
0
投票

我想你正在寻找这样的东西:

import numpy as np

import pyqtgraph as pg
import pyqtgraph.opengl as gl
from pyqtgraph import functions as fn
from pyqtgraph.opengl import GLScatterPlotItem

app = pg.mkQApp("GLVolumeItem Example")
w = gl.GLViewWidget()
w.show()
w.setWindowTitle('pyqtgraph example: GLVolumeItem')
w.setCameraPosition(distance=40)

g = gl.GLGridItem()
# g.scale(10, 10, 1)
w.addItem(g)

N_x = 10
N_y = 10
N_z = 10

x = np.arange(N_x)
y = np.arange(N_y)
z = np.arange(N_z)

data = np.zeros((N_x, N_y, N_z))
data[1, :, :] = 10
data[3, :, :] = 10

d2 = np.zeros(data.shape + (4,), dtype=np.ubyte)
print(data.shape)
print(d2.shape)

d2[:, :, :, 0] = 255*data/np.max(data)      # only works if minimum is 0
d2[:, :, :, 1] = 0
d2[:, :, :, 2] = 0
d2[:, :, :, 3] = 50

v = gl.GLVolumeItem(d2)
# v.translate(10, 10, 10)
w.addItem(v)

ax = gl.GLAxisItem()
w.addItem(ax)

curve = GLScatterPlotItem()
w.addItem(curve)

# pos = np.array((10, 10, 10)).T
# curve.setData(pos=pos, pxMode=False, color=(255, 255, 255, 100), size=0.2)        # I use these for checking positions

if __name__ == '__main__':
    pg.exec()

数据具有形状

(N_x, N_y, N_z)
,但体积项的数据应为形状
(N_x, N_y, N_z, 4)
,其中
4
代表颜色。线
d2[:, :, :, 3] = 50
将每个位置的不透明度设置为
50
d2[:, :, :, 0] = 255*data/np.max(data)
行根据数组的数据设置颜色的红色部分。

© www.soinside.com 2019 - 2024. All rights reserved.