Answers:
通过“摄像机位置”,听起来好像您想调整用于查看3D图的仰角和方位角。您可以使用设置ax.view_init
。我使用以下脚本首先创建了绘图,然后确定了一个合适的高程(或)elev
,从中可以查看我的绘图。然后,我调整了方位角或azim
,以改变绘图周围的整个360度,并保存了每个实例的图形(并在保存绘图时记下了哪个方位角)。对于更复杂的相机镜头,您可以同时调整仰角和角度以达到所需的效果。
from mpl_toolkits.mplot3d import Axes3D
ax = Axes3D(fig)
ax.scatter(xx,yy,zz, marker='o', s=20, c="goldenrod", alpha=0.6)
for ii in xrange(0,360,1):
ax.view_init(elev=10., azim=ii)
savefig("movie%d.png" % ii)
ax.elev
和ax.azim
属性使用。您可能也只是写了ax.azim = ii
,甚至ax.azim += 1
达到了相同的效果。
方便的是将“摄影机”位置应用于新图。因此,我进行绘图,然后使用鼠标更改距离来移动绘图。然后尝试复制包含另一图上距离的视图。我发现axx.ax.get_axes()为我提供了一个带有旧.azim和.elev的对象。
在PYTHON中...
axx=ax1.get_axes()
azm=axx.azim
ele=axx.elev
dst=axx.dist # ALWAYS GIVES 10
#dst=ax1.axes.dist # ALWAYS GIVES 10
#dst=ax1.dist # ALWAYS GIVES 10
以后的3D图形...
ax2.view_init(elev=ele, azim=azm) #Works!
ax2.dist=dst # works but always 10 from axx
编辑1 ...好,关于.dist值,相机位置是错误的思维方式。它作为整个图形的一种hackey标量乘法器而位于一切之上。
这适用于视图的放大/缩放:
xlm=ax1.get_xlim3d() #These are two tupples
ylm=ax1.get_ylim3d() #we use them in the next
zlm=ax1.get_zlim3d() #graph to reproduce the magnification from mousing
axx=ax1.get_axes()
azm=axx.azim
ele=axx.elev
以后的图...
ax2.view_init(elev=ele, azim=azm) #Reproduce view
ax2.set_xlim3d(xlm[0],xlm[1]) #Reproduce magnification
ax2.set_ylim3d(ylm[0],ylm[1]) #...
ax2.set_zlim3d(zlm[0],zlm[1]) #...
%matplotlib notebook