使用 mayavi 为 points3d 中的每个点分配颜色 python
Assign colors to each points in points3d using mayavi python
我在 3D 方面有一些要点space。每个点都有一种颜色,使用以下公式计算 -
// pack r/g/b into rgb
uint8_t r = 255, g = 0, b = 0; // Example: Red color
uint32_t rgb = ((uint32_t)r << 16 | (uint32_t)g << 8 | (uint32_t)b);
如上图,RGB颜色被打包成一个值。我正在尝试使用 mayavi python 可视化这些点。请看下面的代码片段-
from mayavi.mlab import *
import numpy as np
N = 10
# generate random points and colors (just for debugging)
(x, y, z) = np.random.random((3, N))
colors = np.random.random(N)
nodes = points3d(x, y, z, scale_factor=0.1)
nodes.glyph.scale_mode = 'scale_by_vector'
nodes.mlab_source.dataset.point_data.scalars = colors
show()
上面的代码使用了随机颜色,它显示了以下输出-
但是,我想指定颜色而不是使用随机值。请注意,每个点都有一种颜色。在这个 post 中,为了使其更容易,我使用以下函数生成相同颜色的点 -
def pack_rgb(r, g, b):
rgb = (r<<16) + (g<<8) + b
return rgb
colors = [pack_rgb(0, 255, 0) for _ in range(N)]
这会生成红色点,而不是如下所示的绿色点-
这是怎么回事? 我的目标是在 mayavi python 中可视化彩色点,其中每个点都有 RGB 颜色。
3D 中的点 space 可以使用 Mayavi 轻松可视化。可以单独为每个点分配 RGB 颜色。我们还可以为每个点设置一个比例因子。我从 Mayavi 社区找到了以下解决方案,我想在这里分享它-
from mayavi import mlab
import numpy as np
n = 100 # number of points
x, y, z = np.random.random((3, n))
rgba = np.random.randint(0, 256, size=(n, 4), dtype=np.uint8)
rgba[:, -1] = 255 # no transparency
pts = mlab.pipeline.scalar_scatter(x, y, z) # plot the points
pts.add_attribute(rgba, 'colors') # assign the colors to each point
pts.data.point_data.set_active_scalars('colors')
g = mlab.pipeline.glyph(pts)
g.glyph.glyph.scale_factor = 0.1 # set scaling for all the points
g.glyph.scale_mode = 'data_scaling_off' # make all the points same size
mlab.show()
请注意,以上代码需要 Mayavi 4.6.1 或更高版本。
我在 3D 方面有一些要点space。每个点都有一种颜色,使用以下公式计算 -
// pack r/g/b into rgb
uint8_t r = 255, g = 0, b = 0; // Example: Red color
uint32_t rgb = ((uint32_t)r << 16 | (uint32_t)g << 8 | (uint32_t)b);
如上图,RGB颜色被打包成一个值。我正在尝试使用 mayavi python 可视化这些点。请看下面的代码片段-
from mayavi.mlab import *
import numpy as np
N = 10
# generate random points and colors (just for debugging)
(x, y, z) = np.random.random((3, N))
colors = np.random.random(N)
nodes = points3d(x, y, z, scale_factor=0.1)
nodes.glyph.scale_mode = 'scale_by_vector'
nodes.mlab_source.dataset.point_data.scalars = colors
show()
上面的代码使用了随机颜色,它显示了以下输出-
但是,我想指定颜色而不是使用随机值。请注意,每个点都有一种颜色。在这个 post 中,为了使其更容易,我使用以下函数生成相同颜色的点 -
def pack_rgb(r, g, b):
rgb = (r<<16) + (g<<8) + b
return rgb
colors = [pack_rgb(0, 255, 0) for _ in range(N)]
这会生成红色点,而不是如下所示的绿色点-
这是怎么回事? 我的目标是在 mayavi python 中可视化彩色点,其中每个点都有 RGB 颜色。
3D 中的点 space 可以使用 Mayavi 轻松可视化。可以单独为每个点分配 RGB 颜色。我们还可以为每个点设置一个比例因子。我从 Mayavi 社区找到了以下解决方案,我想在这里分享它-
from mayavi import mlab
import numpy as np
n = 100 # number of points
x, y, z = np.random.random((3, n))
rgba = np.random.randint(0, 256, size=(n, 4), dtype=np.uint8)
rgba[:, -1] = 255 # no transparency
pts = mlab.pipeline.scalar_scatter(x, y, z) # plot the points
pts.add_attribute(rgba, 'colors') # assign the colors to each point
pts.data.point_data.set_active_scalars('colors')
g = mlab.pipeline.glyph(pts)
g.glyph.glyph.scale_factor = 0.1 # set scaling for all the points
g.glyph.scale_mode = 'data_scaling_off' # make all the points same size
mlab.show()
请注意,以上代码需要 Mayavi 4.6.1 或更高版本。