ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

如何使用Mayavi网格图的掩码?

2019-06-29 05:43:18  阅读:459  来源: 互联网

标签:python plot 3d enthought mayavi


我正在使用python和mayavi2进行3D绘图.我正在使用网格命令绘制球体,现在我想为球体的一些面板着色不同的颜色.看起来这就是面具选项的用途,但我无法让它工作(我只是让整个球体重新着色).

http://docs.enthought.com/mayavi/mayavi/auto/mlab_helper_functions.html#mayavi.mlab.mesh
“mask:布尔掩码数组来抑制一些数据点”

我用:

mesh(X,Y,Z, color = (1,1,1), opacity=0.5)

将整个球体着色为白色,然后

mesh(X,Y,Z, color = (1,0,1), mask = active_region, opacity=0.5) 

将某些部分涂成紫色,在哪里

active_region = [[False False False False False False  True]
                 [False False False False False False  True]
                 [False False False False False  True  True]
                 [False False False  True  True  True  True]
                 [False False  True  True  True  True  True]
                 [False False False  True  True  True  True]
                 [False False False False False False  True]]

但这会导致完全紫色的球体. X,Y和Z都是具有形状(7,7)的数组,就像active_region一样.我究竟做错了什么?

解决方法:

屏蔽工作基于标量,而不是在您设置纯色时.试试这个:

import numpy as np
m = mesh(X,Y,Z, mask=active_region, opacity=0.5)
m.mlab_source = ones_like(X)

掩蔽的工作原理是将标量设置为屏蔽的Nan.绘制的几何图形相同,但如果标量为Nan,则不显示蒙版区域.

无论如何,这里有一个完整的工作示例供您参考:

import numpy as np
phi, theta = np.mgrid[0:np.pi:100j, 0:2 * np.pi:100j]
x = np.sin(phi) * np.cos(theta)
y = np.sin(phi) * np.sin(theta)
z = np.cos(phi)
mask = np.zeros_like(x).astype(bool)
mask[::5] = True
mask[:,::5] = True

from mayavi import mlab
mlab.mesh(x, y, z, scalars=z, mask=mask)

请注意,您不需要提供标量,只是如果您提供显式颜色,则不会有屏蔽.此处的标量也只是设置为z,您可以使用任何兼容的数组,甚至是通过ones_like(X)的常量值.

事实证明,如果你有一个常量标量VTK 5.6似乎没有正确掩盖你的点,如果你有VTK 5.10你可以做到以下几点:

m = mlab.mesh(x, y, z, scalars=scalars, mask=mask)
m.module_manager.scalar_lut_manager.lut.nan_color = 0, 0, 0, 0

否则,使用标量= z并设置一个恒定颜色查找表.您可以通过单击管道编辑器上的“颜色和图例”来创建自己的,然后单击“启动lut编辑器”.要使用此自定义颜色映射,请执行以下操作:

scalars = np.ones_like(x)
m = mlab.mesh(x, y, z, scalars=scalars, mask=mask)
m.module_manager.scalar_lut_manager.lut_mode = 'file'
m.module_manager.scalar_lut_manager.file_name = '/path/to/your.lut'

如果你不想搞乱LUT编辑器和所有那些malarky,这里是一个纯粹的numpy版本,你可以用Python做.

m = mlab.mesh(x, y, z, scalars=z, mask=mask)
# Lets make some colors:
#    this is an array of (R, G, B, A) values (each in range 0-255), there should
#    be at least 2 colors in the array.
colors = np.zeros((2, 4), dtype='uint8')
# Set the green value to constant.
colors[:,1] = 255
# the alpha value to fully opaque.
colors[:,3] = 255
# Now use this colormap.
m.module_manager.scalar_lut_manager.lut.table = colors

请注意,颜色数组应至少有2种颜色,并且可以包含任意数量的颜色.对于恒定的颜色2应该足够了.

HTH.

标签:python,plot,3d,enthought,mayavi
来源: https://codeday.me/bug/20190629/1323535.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有