pythonchartsmatplotlibscatter-plot

Any easy way to plot a 3d scatter in Python that I can rotate around?


Currently I'm using matplotlib to plot a 3d scatter and while it gets the job done, I can't seem to find a way to rotate it to see my data better.

Here's an example:

import pylab as p
import mpl_toolkits.mplot3d.axes3d as p3

#data is an ndarray with the necessary data and colors is an ndarray with
#'b', 'g' and 'r' to paint each point according to its class

...

fig=p.figure()
ax = p3.Axes3D(fig)
ax.scatter(data[:,0], data[:,2], data[:,3], c=colors)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
fig.add_axes(ax)
p.show()

I'd like a solution that lets me do it during execution time but as long as I can rotate it and it's short/quick I'm fine with it.

Here's a comparison of the plots produced after applying a PCA to the iris dataset:
1. mayavi
alt text
2. matplotlib
alt text

Mayavi makes it easier to visualize the data, but MatPlotLib looks more professional. Matplotlib is also lighter.


Solution

  • Using mayavi, you can create such a plot with

    import enthought.mayavi.mlab as mylab
    import numpy as np
    x, y, z, value = np.random.random((4, 40))
    mylab.points3d(x, y, z, value)
    mylab.show()
    

    The GUI allows rotation via clicking-and-dragging, and zooming in/out via right-clicking-and-dragging.

    alt text