我试图用matplotlib绘制三维矢量图。我使用了下面的代码,这是基于前面的一个绘制二维矢量的示例,但是为三维矢量添加了组件。
#!/usr/bin/python
import numpy as np
import matplotlib.pyplot as plt
soa =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]])
X,Y,Z,U,V,W = zip(*soa)
plt.figure()
ax = plt.gca()
ax.quiver(X,Y,Z,U,V,W,angles='xyz',scale_units='xyz',scale=1,color='b')
ax.set_xlim([-1,10])
ax.set_ylim([-1,10])
ax.set_zlim([10,1])
plt.draw()
plt.show()
有什么想法,如何调整这个,使一个三维矢量图?
您需要在mpl_工具包中使用来自mplot3d的Axes3D,然后将子批次投影设置为3d:
注意:旧版本的matplotlib通常会给出此代码的错误。尝试使用至少1.5版
从其他的回答和评论来看,matplotlib版本之间显然存在差异。不过,我相信蒂姆B的回答并不能回答这个问题。绘制的震颤并不代表给定的矢量,因为它们的震级没有得到正确的表示。此外,箭头似乎位于向量的预期起点。
下面的代码改编自上一个答案中的代码,使用
matplotlib1.5.3
在python2.7
中生成所需的结果。要可视化一个向量,将轴点设置为pivot='tail'
,并按向量的大小缩放抖动具有所需的效果。箭袋箭头按箭袋长度的比例缩放。这里我将缩放因子除以向量的大小,使所有箭头的大小与arrow_length_ratio=0.3/vlength
相同。缺点-我的代码不是很紧凑。我不得不提供一个未打包的X,Y,Z,U,V,W格式,以便每次调用ax.quiver时使用不同的kwarg。如果有人能推荐一个包装夸尔格的编辑,我将非常感激。
输出: Plot of vectors as quivers with matplotlib-1.5.3.
相关问题 更多 >
编程相关推荐