我正在使用MayaVi Python库来绘制3d点,使用points3d该类.文档指定通过第四个参数指定每个点的颜色s:
此外,您可以传递与x,y和z相同形状的第四个数组s,为每个点提供关联的标量值,或者返回标量值的函数f(x,y,z).此标量值可用于调整点的颜色和大小.
这指定了每个点的标量值,将点映射到颜色映射,例如copper,jet或hsv.例如,从他们的文件:
import numpy
from mayavi.mlab import *
def test_points3d():
t = numpy.linspace(0, 4*numpy.pi, 20)
cos = numpy.cos
sin = numpy.sin
x = sin(2*t)
y = cos(t)
z = cos(2*t)
s = 2+sin(t)
return points3d(x, y, z, s, colormap="copper", scale_factor=.25)
Run Code Online (Sandbox Code Playgroud)
得到:

相反,我想将每个点的实际值指定为(r,g,b)元组.这可能在MayaVi中吗?我已经尝试用s一个元组数组替换,但是会抛出一个错误.
我正在尝试通过RGB堆栈制作一系列2D平面的3D绘图,如下所示:

我知道可以mpl_toolkits.mplot3d通过将每个像素的x,y,z坐标和RGB(A)颜色传递给plot_surface:
import numpy as np
from matplotlib import pyplot as pp
from mpl_toolkits.mplot3d.axes3d import Axes3D
def plot_stack_slices(rgbstack, scale=(1., 1., 1.), z_interval=10.):
fig, ax = pp.subplots(1,1,subplot_kw={'projection':'3d'})
ax.invert_zaxis()
ax.hold(True)
sx, sy, sz = scale
nz, ny, nx, nc = rgbstack.shape
stack_xyz = np.mgrid[:nx*sx:nx*1j, :ny*sy:ny*1j, :nz*sz:nz*1j]
slices = rgbstack[::-z_interval]
slice_xyz = np.rollaxis(stack_xyz, 3, 0)[::-z_interval]
surflist = []
for (img,xyz) in zip(slices, slice_xyz):
x, y, z = xyz
s = ax.plot_surface(x, y, z, facecolors=img**0.75,
rstride=50, cstride=50)
surflist.append(s)
return fig, …Run Code Online (Sandbox Code Playgroud)