<p>从其他的回答和评论来看,matplotlib版本之间显然存在差异。不过,我相信蒂姆B的回答并不能回答这个问题。绘制的震颤并不代表给定的矢量,因为它们的震级没有得到正确的表示。此外,箭头似乎位于向量的预期起点。</p>
<p>下面的代码改编自上一个答案中的代码,使用<code>matplotlib1.5.3</code>在<code>python2.7</code>中生成所需的结果。要可视化一个向量,将轴点设置为<code>pivot='tail'</code>,并按向量的大小缩放抖动具有所需的效果。箭袋箭头按箭袋长度的比例缩放。这里我将缩放因子除以向量的大小,使所有箭头的大小与<code>arrow_length_ratio=0.3/vlength</code>相同。</p>
<p>缺点-我的代码不是很紧凑。我不得不提供一个未打包的X,Y,Z,U,V,W格式,以便每次调用ax.quiver时使用不同的kwarg。如果有人能推荐一个包装夸尔格的编辑,我将非常感激。</p>
<pre><code>import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
vectors=np.array( [ [0,0,1,1,-2,0], [0,0,2,1,1,0],[0,0,3,2,1,0],[0,0,4,0.5,0.7,0]])
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
for vector in vectors:
v = np.array([vector[3],vector[4],vector[5]])
vlength=np.linalg.norm(v)
ax.quiver(vector[0],vector[1],vector[2],vector[3],vector[4],vector[5],
pivot='tail',length=vlength,arrow_length_ratio=0.3/vlength)
ax.set_xlim([-4,4])
ax.set_ylim([-4,4])
ax.set_zlim([0,4])
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
plt.show()
</code></pre>
<p>输出:
<a href="https://i.stack.imgur.com/Kq9f7.png" rel="nofollow noreferrer">Plot of vectors as quivers with matplotlib-1.5.3.</a></p>