Matplotlib Axes3D.quiver图中不同长度的箭头

时间:2015-03-11 21:17:42

标签: python matplotlib

有没有办法改变箭袋图中单个箭头的长度?

我使用以下方法创建了一个情节:

lines_to_draw = list of numpy 3d vectors
xs, ys, zs    = list of coordinates
us, vs, ws    = list of displacements

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
for line in lines_to_draw:
    ax.plot(line[:,0], line[:,1], line[:,2], color='green'
ax.quiver(xs, ys, zs, us, vs, ws)

它看起来像这样(轴关闭): Quiver plot

问题在于所有箭头看起来都是相同的。文档表明可能就是这种情况(特别是length参数):

  

Axes3D.quiver(* args,** kwargs)   绘制箭头的3D场。

     

呼叫签名:

     箭头(X,Y,Z,U,V,W,** kwargs)参数:

     

X,Y,Z:箭头位置的x,y和z坐标

     

U,V,W:箭头指向的方向向量参数可以是   数组或标量,只要它们可以一起广播。   参数也可以是掩码数组。如果是任何一个元素   参数被掩盖,那么相应的箭元素就不会被掩盖   作图。

     

关键字参数:

     

长度:[1.0 | float]每个箭袋的长度,默认为1.0 ,.   单位与轴相同

     

arrow_length_ratio:[0.3 |漂浮]   箭头与箭头的比例,默认为0.3任意   其他关键字参数委托给LineCollection

为了澄清,矢量的大小相差最多30倍。所以应该有一个非常明显的区别。

1 个答案:

答案 0 :(得分:4)

在下一个主要的MPL版本中,可以看到这个pull request

Hack:您可以编辑系统上的相应MPL文件,请参阅this answer。

或者:为每个箭头发出单独的ax.quiver命令,并使用单独的length属性。这不是很有效,但在某些情况下,这可能会有所帮助。