2014-11-17 6 views
3

Мне нужно визуализировать несколько перекрывающихся скалярных полей в Python. Я нашел mayavi библиотеку, чтобы сделать этот вид сюжета. Проблема в том, что я не понимаю, как настроить цветовую карту для скалярных полей. Моя идея состоит в том, чтобы иметь оттенки одного цвета для каждого поля. Я попытался принять an example, но он не работает. Здесь есть мой код, чтобы визуализировать скалярное поле, используя оттенки красного:Визуализация скалярных полей в Python

import numpy as np 
from mayavi import mlab 

x, y, z = np.ogrid[-10:10:20j, -10:10:20j, -10:10:20j] 
s = np.sin(x*y*z)/(x*y*z) 

src = mlab.pipeline.scalar_field(s) 
volume = mlab.pipeline.volume(src) 

lut = np.zeros((256, 4), np.uint8) 
lut[:,-1] = 255 
lut[:, 0] = np.linspace(0, 255, 256) 

volume.module_manager.scalar_lut_manager.lut.table = lut 

mlab.draw() 
mlab.view(40, 85) 

mlab.show() 

Однако выход сюжет всегда со стандартной сине-красной справочной таблицей.

+0

Вы когда-нибудь находили решение? У меня возникла аналогичная проблема: https://stackoverflow.com/questions/36946231/using-perceptually-uniform-colormaps-in-mayavi-volumetric-visualization – crypdick

+0

Хмм, когда я пытаюсь переназначить 'table' на измененный' lut', он ничего не делает. Я собираюсь подать отчет об ошибке. – crypdick

+0

Насколько я могу судить, это кажется ошибкой. Я подал здесь отчет об ошибке: https://github.com/enthought/mayavi/issues/371 – crypdick

ответ

0

Не удалось найти решение с использованием lut_manager, однако нижеприведенное ниже решение this github reply работает для меня.

import numpy as np 
from mayavi import mlab 
# import color transfer function from vtk 
from tvtk.util import ctf 
# import matlab colormaps 
from matplotlib.pyplot import cm 

x, y, z = np.ogrid[-10:10:20j, -10:10:20j, -10:10:20j] 
s = np.sin(x*y*z)/(x*y*z) 

src = mlab.pipeline.scalar_field(s) 
volume = mlab.pipeline.volume(src) 

# save the color transfer function of the current volume 
c = ctf.save_ctfs(volume._volume_property) 
# change the alpha channel as needed 
c['alpha'][1][1] = 0.5 
# change the color points to another color scheme 
# in this case 'magma' 
c['rgb']=[[a[0],a[1],a[2],cm.magma.colors.index(a)/255] for a in cm.magma.colors] 
# load the new color transfer function 
ctf.load_ctfs(c, volume._volume_property) 
# signal for update 
volume.update_ctf = True 

mlab.show() 
Смежные вопросы