从其他答案和评论中可以看出,matplotlib的版本存在明显差异。然而,我认为Tim B的答案并没有回答这个问题。绘制的箭头不代表给定的向量,因为它们的大小没有得到正确的表示。此外,箭头似乎坐落在向量的起始点。
下面的代码是基于之前答案中的代码,它在python2.7和matplotlib1.5.3中产生了期望的结果。为了可视化一个向量,将枢轴点设置为“tail”,并通过向量的大小来缩放quiver可以达到预期的效果。quiver箭头的大小与quiver长度的比例有关。在这里,我将缩放因子除以向量的大小,以使所有箭头的大小相同,使用arrow_length_ratio=0.3/vlength。
缺点 - 我的代码不太紧凑。我必须以未打包的形式提供X、Y、Z、U、V、W,以便对每次调用ax.quiver使用不同的kwargs。如果有人能建议一种编辑方法,将kwargs打包,我将非常感激。
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()
输出:
使用matplotlib-1.5.3绘制向量箭头图。
pip install matplotlib --upgrade
来升级。 - farenorth