Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何为Mayavi'使用面膜;什么是网格图?_Python_3d_Plot_Enthought_Mayavi - Fatal编程技术网

Python 如何为Mayavi'使用面膜;什么是网格图?

Python 如何为Mayavi'使用面膜;什么是网格图?,python,3d,plot,enthought,mayavi,Python,3d,Plot,Enthought,Mayavi,我正在使用python和mayavi2进行3D绘图。我正在使用mesh命令绘制一个球体,现在我想给球体的一些面板涂上不同的颜色。看起来这就是遮罩选项的用途,但我无法让它工作(我只是让整个球体重新着色) “掩码:用于抑制某些数据点的布尔掩码数组” 我使用: 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)

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

“掩码:用于抑制某些数据点的布尔掩码数组”

我使用:

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]]

但这会形成一个完全紫色的球体。十、 Y和Z都是形状为(7,7)的阵列,就像活动_区域一样。我做错了什么?

掩蔽基于标量工作,而不是在设置纯色时。请尝试以下方法:

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
,您可以使用任何兼容的数组,甚至可以通过
像(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
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'
否则,请使用
scalar=z
并设置恒定颜色查找表。您可以通过单击管道编辑器上的“颜色和图例”,然后单击“启动lut编辑器”来创建自己的。要使用此自定义颜色贴图,请执行以下操作:

m = mlab.mesh(x, y, z, scalars=scalars, mask=mask)
m.module_manager.scalar_lut_manager.lut.nan_color = 0, 0, 0, 0
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编辑器和所有的马勒克语言,这里有一个纯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应该足够了


嗯。

嗯,应该可以了。如果所有的值都为真或假,会发生什么?谢谢你的持续帮助,但我仍然有问题。我尝试了更新的示例,但仍然没有看到任何掩蔽。你能附上你得到的输出的图片吗?我的版本信息:Mayavi版本4.0.0-VTK版本5.6.0 Python 2.7.2 | EPD 7.1-2 wxPython 2.8.10.1我也不明白什么是标量,你能解释一下或给我一个参考吗?我更新到版本4.3.0-VTK版本5.6.0 Python 2.7.3 | 64位| Qt 1.1.2,它可以工作!谢谢我仍然非常想知道“scalars”参数是如何工作的。当我尝试使用像(X)这样的东西时,遮罩似乎被关闭了,整个球体仍然变成蓝色。是的,除了使用标量=z,就像你所做的,或者标量=X或y,我无法使用遮罩。所以到目前为止,我的假设是,它必须是前三个变量之一,这对我要做的事情确实不起作用。我需要一种自己设置颜色的方法。你是对的,在这方面似乎存在VTK错误,所以常量标量似乎不起作用。如果您有可用的VTK-5.10,则可以解决此问题,但您似乎没有。“标量”是与数据上的每个点关联的标量属性,通过查阅表格,数据显示为颜色。遮罩的工作原理是将所有的“Nan”值转换为透明的颜色,而在某种程度上,由于颜色不变,VTK似乎无法使其透明。您可以选择创建一个具有恒定颜色的lut文件并使用它。