Matplotlib 3D scatter plot with color gradient
Here is an example for 3d scatter with gradient colors:
import matplotlib.cm as cmxfrom mpl_toolkits.mplot3d import Axes3Ddef scatter3d(x,y,z, cs, colorsMap='jet'): cm = plt.get_cmap(colorsMap) cNorm = matplotlib.colors.Normalize(vmin=min(cs), vmax=max(cs)) scalarMap = cmx.ScalarMappable(norm=cNorm, cmap=cm) fig = plt.figure() ax = Axes3D(fig) ax.scatter(x, y, z, c=scalarMap.to_rgba(cs)) scalarMap.set_array(cs) fig.colorbar(scalarMap) plt.show()
Of course, you can choose the scale to range between different values, like 0 and 1.
Following works: I can't figure out why yours doesn't. You should be able to set color as a sequence of RGBA floats, or just sequence of floats.
# Create Mapcm = plt.get_cmap("RdYlGn")x = np.random.rand(30)y = np.random.rand(30)z = np.random.rand(30)col = np.arange(30)# 2D Plotfig = plt.figure()ax = fig.add_subplot(111)ax.scatter(x, y, s=10, c=col, marker='o') # 3D Plotfig = plt.figure()ax3D = fig.add_subplot(111, projection='3d')p3d = ax3D.scatter(x, y, z, s=30, c=col, marker='o') plt.show()
However, in help of scatter, I see the following, it may be related.
A :class:`matplotlib.colors.Colormap` instance or registered name. If *None*, defaults to rc ``image.cmap``. *cmap* is only used if *c* is an array of floats.