pythonmatplotlibmplot3dmatplotlib-3d

how to set "camera position" for 3d plots using python/matplotlib?


I'm learning how to use mplot3d to produce nice plots of 3d data and I'm pretty happy so far. What I am trying to do at the moment is a little animation of a rotating surface. For that purpose, I need to set a camera position for the 3D projection. I guess this must be possible since a surface can be rotated using the mouse when using matplotlib interactively. But how can I do this from a script? I found a lot of transforms in mpl_toolkits.mplot3d.proj3d but I could not find out how to use these for my purpose and I didn't find any example for what I'm trying to do.


Solution

  • By "camera position," it sounds like you want to adjust the elevation and the azimuth angle that you use to view the 3D plot. You can set this with ax.view_init. I've used the below script to first create the plot, then I determined a good elevation, or elev, from which to view my plot. I then adjusted the azimuth angle, or azim, to vary the full 360deg around my plot, saving the figure at each instance (and noting which azimuth angle as I saved the plot). For a more complicated camera pan, you can adjust both the elevation and angle to achieve the desired effect.

        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)