下面的程序绘制3d箭头。我根据海拔(z坐标)设置箭头的颜色。
工作原理:箭杆获得正确的颜色
问题:箭头(整体或部分)的颜色不同,很难看。
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D # noqa: F401 unused import
import matplotlib.cm as cm
n = 5
n3 = n*n*n
u, v, w = np.arange(n3), np.arange(n3), np.arange(n3) # Positions
x, y, z = np.arange(n3), np.arange(n3), np.arange(n3) # Vector components
colors = [(0, 0, 255)]*n3
mid = n/2
for i in range(n):
for j in range(n):
for k in range(n):
ii = i*n*n + j*n + k
u[ii], v[ii], w[ii] = -(j-mid), i-mid, 0 # Whorl
x[ii], y[ii], z[ii] = i, j, k
colors[ii] = (1, 0, 0)
if abs(k-(n-1)/2) < 1.1: colors[ii] = (0, 1, 0)
if abs(k-(n-1)/2) < 0.1: colors[ii] = (0, 0, 1)
figure = plt.figure()
axes = figure.gca(projection='3d') # gca = get/create current axes
q = axes.quiver(x, y, z, u, v, w, color=colors, length = 0.5, normalize=True)
plt.show() # Finally display the plot
输出:
2条答案
按热度按时间dojqjjoe1#
我认为问题是你没有指定箭头的颜色,所以matplotlib循环遍历你的
colors
变量来给箭头上色。在你的for循环之后,使用下面的代码来固定箭头的颜色。每个向量由3个元素组成:一条线作为向量的主体,两条线作为箭头。所以如果你有
n
向量,你需要提供n*3
颜色来正确地指定颜色。假设你要绘制两个向量,下面是向量元素的颜色在颜色数组中的排序方式:line1col,line2col,l1arrow1col,l1arrow2col,l2arrow1col,l2arrow2col,l3arrow1col,l3arrow2col。
这里有一个简单的例子,有3个矢量,说明如何为矢量着色。
ttp71kqs2#
That是正确的,但对我来说,只有在我将相同的颜色列表
cs
添加到edgecolor变量后,它才能工作;即:ax.quiver(...., color=cs, edgecolor=cs)