2015-08-17 16 views
2

使用mlab.surf()函数绘制3d曲面时,Nan值的存在会导致奇数的绘图行为。任何想法我可能做错了将不胜感激。使用Mayavi 3d曲面蒙板使用mlab.surf()

In[37]: import mayavi 
In[38]: print mayavi.__version__ 
4.4.0 

from mayavi import mlab 
j = np.copy('some 2d-array') # where j is shape (680, 680) and contains Nans 
mlab.surf(j) 

enter image description here

如果我和最小值取代的NaN,情节看起来不错,但周围的边缘人造飞机,我想剪短

j[np.isnan(j)]=j[~np.isnan(j)].min() 
mlab.surf(j) # where j has been set to j.min() where j==np.nan 

enter image description here

如果我然后添加一个掩码,对应于j==j.min()的区域,我又得到了奇怪的输出(我也尝试了这个crea婷直接在阵列上的面具之前重新定义的NaN):

m = np.ma.masked_where(j==j.min(), j).mask 
mlab.surf(j, mask=m) 

enter image description here

回答

1

我会尝试这样的事:

#first mask all the NaN: 
    maskedarray = np.ma.masked_invalid(j) 
    from mayavi import mlab 
    mlab.figure(1, fgcolor=(0, 0, 0), bgcolor=(1, 1, 1))   
    surH = mlab.surf(maskedarray, warp_scale='auto', mask=maskedarray.mask)  
    mlab.show() 
+0

感谢您抽出宝贵的时间来回答这个老问题。如果我有机会,我会试试这个。 – Jason