2015-08-17 1 views
2

При построении трехмерной поверхности с использованием функции mlab.surf() наличие значений Nan приводит к нечетному построению графика. Любые идеи о том, что я могу делать неправильно, будут оценены.Использование маски с 3D-графикой Mayavi с использованием 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

Если я заменяю пренебрежимо малых с минимальным значением, сюжет выглядит хорошо, но имеет искусственную плоскость вокруг краев, что я хочу обрезанную:

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 тин маску непосредственно на массиве до переосмысление пренебрежимо малых):

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