python pyplot.quiver:缩放两个叠加的矢量场

时间:2014-06-08 15:27:32

标签: python matplotlib plot scaling vector-graphics

我想在一个箭袋图中绘制两个矢量场。这已经有效了:对于每个点,有两个不同颜色的矢量。现在问题是,缩放比例不同:例如来自第一个字段(sol)的向量(1,0)以另一个长度显示为来自字段2(res)的(1,0)。

如何让箭头以相同比例绘制两个字段,以便res中的(1,0)在我的图上具有与来自sol的(1,0)相同的物理长度?

我的代码:

import numpy as np
from matplotlib import pyplot as plt

#res and sol are two vector fields with dimension (ny, nx ,2)

step=3 #not all vectors should be plotted. Just every third one (in x and y direction)

X,Y = np.meshgrid(np.arange(0,nx,step), np.arange(0,ny,step))            
Q=plt.quiver(X,Y,sol[::step,::step,0], sol[::step,::step,1], color='r')    
W=plt.quiver(X,Y,res[::step,::step,0], res[::step,::step,1], color='b')
plt.quiverkey(Q, 0.4, 0.15, 1, r'text1', labelpos='S')
plt.quiverkey(W, 0.6, 0.15, 1, r'text2', labelpos='S')
plt.show()

1 个答案:

答案 0 :(得分:1)

您有两种解决方案:

  1. 规范化输入数据并进行缩放
  2. 告诉箭袋如何扩展数据
  3. 解决方案2(最快):

    Q=plt.quiver(X,Y,sol[::step,::step,0], sol[::step,::step,1], color='r', scale=1)
    W=plt.quiver(X,Y,res[::step,::step,0], res[::step,::step,1], color='b', scale=1)
    

    您可以调整比例值,但必须在两个箭头中保持相同的值才能获得预期效果。 This thread有所帮助,但在你的情况下,我认为给每个箭袋提供相同的比例并不是一个过度规范。