2016-12-21 17 views
0

Почему цветовая палитра дискретизирована в 3 разных цветах, когда я ожидаю, что она будет непрерывной здесь?Получите непрерывную цветовую карту в mlab.contour3d

import numpy as np 
from mayavi import mlab 

cube = np.zeros((100,100,100)) 
cube[10:90,10:90,10:90] = np.linspace(0,1,80) 
mlab.contour3d(cube, colormap="jet", opacity=0.5) 

Mayavi output

Кроме того, почему есть только один цвет на моем кубе, если не установить непрозрачность быть ниже 1?

ответ

1

Контур - это кривая (в 3D-поверхности), которая посещает точки равной ценности. Для числовых данных он будет лежать на точках сетки или между ними путем интерполяции.

«Внешняя» часть вашего куба - это все нули, поэтому есть прыжок с индексами 10 и 90, который создает контурную поверхность.

Внутренние границы создаются, когда значения в вашей сетке пересекаются с равными значениями контура (по умолчанию, по-видимому, всего 3 значения).

Наконец, поскольку внешняя часть куба равна нулю, без прозрачности, вы увидите только это, и никакая вариация в значении не означает изменения цвета.

Приведем пример ниже с большим количеством уровней (9) и без нулевой границы, что дает горизонтальные контурные плоскости.

import numpy as np 
from mayavi import mlab 

cube = np.zeros((100,100,100)) 
cube[:,:,:] = np.linspace(0, 1, np.prod(cube.shape)).reshape(cube.shape).T 
mlab.contour3d(cube, colormap="jet", opacity=0.5, contours=9) 
mlab.show() 

Вы также можете рассмотреть «разрезанные плоскости», которые производят двумерные срезы в трехмерных данных. На этих страницах есть примеры: http://docs.enthought.com/mayavi/mayavi/mlab_case_studies.html и http://docs.enthought.com/mayavi/mayavi/auto/examples.html