Mayavi - цветные векторы, основанные на направлении, а не величине

В последнее время я использую Mayavi для создания очень хороших векторных графиков. Используя Numpy, я читаю данные из файла (который организован в столбцы как 'x y z Vx Vy Vz'), а затем строю результаты с помощью Mayavi:

#Import libraries
from mayavi import mlab
import numpy as np

#Read in data
data = np.loadtxt('filename', float)
x = data[:,0]
y = data[:,1]
z = data[:,2]
Vx = data[:,3]
Vy = data[:,4]
Vz = data[:,5]

#Plot
mlab.quiver3d(x, y, z, Vx, Vy, Vz, mode='arrow', colormap = 'jet')
mlab.show()

Это работало нормально, пока мне не потребовалось построить нормализованные векторы. А именно, величина всех векторов равна 1. Функция quiver3d придает вектору цвет, основанный на его величине, так что сейчас каждый вектор одного цвета. Однако информация, которую мне нужно передать, основана на ориентации векторов.

Мне бы хотелось, чтобы кто-нибудь помог мне понять, как раскрашивать векторы в Mayavi, используя направление вектора, а НЕ его величину.


person user2624864    schedule 07.06.2015    source источник


Ответы (1)


Я не верю, что у Mayavi есть настройки, чтобы сделать это легко. Но вы можете сделать это, передав скалярные значения, соответствующие цвету

x,y,z,u,v,w = data.T
scalars = np.random.random((len(data),))
mlab.quiver3d(x,y,z,u,v,w, scalars=scalars)

Теперь, если вам нужна какая-то значимая цветовая схема, например R = X, G = Y, B = Z или аналогичная, mayavi не предназначен для этого очень хорошо. Но см. Как напрямую установить цвета RGB / RGBA в майави

person aestrivex    schedule 08.06.2015
comment
Спасибо за комментарий. Я надеялся, что это легко исправить, но не думаю. Сейчас я работаю следующим образом: я немного масштабирую ось на небольшую величину (скажем, x - ›x * 1.05). Это вводит некоторые цветовые вариации. Затем я помещаю его в программу, похожую на Photoshop (gnuplot), и увеличиваю различия. - person user2624864; 14.06.2015