Matplotlib颤动量表

时间:2011-05-06 12:30:18

标签: python matplotlib

我正在尝试使用带有箭头功能的matploblib绘制一些箭头。但是我想用数组分别选择每个箭头的长度。

http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.quiver http://matplotlib.sourceforge.net/examples/pylab_examples/quiver_demo.html

在这些演示和文档中,显示您可以按比例更改比例(x,y,width,height,xy,inches,...),有没有办法为每个箭头定义比例?

2 个答案:

答案 0 :(得分:10)

要指定每个箭头的位置,向量长度是箭头图的过度规范。因此,您需要做的是更改您正在绘制的数据。

如果你有矢量场U和V(与你的例子相同的U和V),你可以通过以下方式对它们进行标准化:

N = numpy.sqrt(U**2+V**2)  # there may be a faster numpy "normalize" function
U2, V2 = U/N, V/N

然后你可以应用你想要的任何比例因子数组:

U2 *= F
V2 *= F

答案 1 :(得分:0)

如果您想对两个向量(例如x和y)有一些相对向量幅度的概念,则可以尝试这种非线性缩放:

L = np.sqrt(x**2 + y**2)
U = x / L 
V = y / L 
#If we just plotted U and V all the vectors would have the same length since 
#they've been normalized.

m = np.max(L)
alpha = .1 
#m is the largest vector, it will correspond to a vector with 
#magnitude alpha in the quiver plot

S=alpha /(1+np.log(m/L)) 

U1=S*U 

V1=S*V

plt.figure() 
Q = plt.quiver(x,y,U1,V1,scale = 1., units='width') 

qk = plt.quiverkey(Q, 0.9, 0.9, 2, r'$2 \frac{m}{s}$', 
labelpos ='E',coordinates='figure')

您可以通过增加或减小alpha值来更改矢量幅度的范围。