1
私はベクトルフィールドをプロットしようとしており、Mayavi2sのquiver3d()関数を使用しています。私は、矢印が単位球面上での角度に応じて着色したいと思います:Mayaviのquiver3d()のカラーマップ
私はこれをこの方法で行うことができます。
def color(theta, phi):
while(phi < 0):
phi += 2.0*np.pi
h = phi/(2.0 * np.pi)
s = 1
v = 1.0 - 0.9999999*(theta/np.pi)
print("h = {}, s = {}, v ={}".format(h,s,v))
return hsv_to_rgb(h,s,v)
def plot_nice():
x = np.array([1.,2.,3.])
y = np.array([0.,0.,0.])
z = y
phi = np.linspace(0,np.pi/2.0,3)
theta = phi
u = np.sin(theta) * np.cos(phi)
v = np.sin(theta) * np.sin(phi)
w = np.cos(theta)
obj = quiver3d(x, y, z, u, v, w,
line_width=3, colormap='hsv',
scale_factor=0.8, mode='arrow',resolution=25)
for i in range(x.shape[0]):
r,g,b = color(theta[i], phi[i])
print("R: {}, G: {}, B: {}".format(r,g,b))
obj = quiver3d(x[i], y[i], z[i], u[i], v[i], w[i],
line_width=3, color=(r,g,b), colormap='hsv',
scale_factor=0.8, mode='arrow',resolution=25)
return obj
figure(bgcolor=(1,1,1))
plot_nice()
しかし、私は数百を持っている場合、これは非常に遅いです矢印の私は、より高速な方法でそれを行うことができます。
def plot_fast():
x = np.array([1.,2.,3.])
y = np.array([0.,0.,0.])
z = y
phi = np.linspace(0,np.pi/2.0,3)
theta = phi
u = np.sin(theta) * np.cos(phi)
v = np.sin(theta) * np.sin(phi)
w = np.cos(theta)
obj = quiver3d(x, y, z, u, v, w,
line_width=3, colormap='hsv',
scale_factor=0.8, mode='arrow',resolution=25)
plot_fast()
どのように私は、各矢印のために新しいプロットを作成することなく、上のプロットのようなものを作成するのですか?
戦争が正しく理解されていれば、1次元情報しかエンコードできないのですか?私は極角と方位角の両方をエンコードしたいと思います。例えば。 https://en.wikipedia.org/wiki/HSL_and_HSV – Stein
カスタムの長さまたはカスタム色のいずれかを指定できます。どのような方法でも、色はphiとthetaに依存します。 'scalars'引数はx、y、z、u、v、wと同じ長さでなければなりません。 –