我最近一直在用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中使用矢量的方向而不是其大小来为矢量着色
我不相信mayavi有一个设置可以轻松做到这一点。但是你可以通过传递与color
相对应的标量值来实现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的设计并不能很好地做到这一点。但是请参见如何在mayavi中直接设置RGB/RGBA颜色