Matplotlib 3D scatter plot with color gradient

后端 未结 2 986
你的背包
你的背包 2020-12-15 05:22

How can I create a 3D plot with a color gradient for the points? See the example below, which works for a 2D scatter plot.

Edit (thanks to Chris): What I\'m expectin

相关标签:
2条回答
  • 2020-12-15 05:43

    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 Map
    cm = plt.get_cmap("RdYlGn")
    
    x = np.random.rand(30)
    y = np.random.rand(30)
    z = np.random.rand(30)
    col = np.arange(30)
    
    # 2D Plot
    fig = plt.figure()
    ax = fig.add_subplot(111)
    ax.scatter(x, y, s=10, c=col, marker='o')  
    
    # 3D Plot
    fig = 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.
    
    0 讨论(0)
  • 2020-12-15 05:52

    Here is an example for 3d scatter with gradient colors:

    import matplotlib.cm as cmx
    from mpl_toolkits.mplot3d import Axes3D
    def 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.

    0 讨论(0)
提交回复
热议问题