colored wireframe plot in matplotlib

前端 未结 3 1527
半阙折子戏
半阙折子戏 2021-01-04 03:05

I am trying to color a wireframe plot according to the z-value. I can\'t find any code examples on the internet.

Here is an example of a surface plot that has the co

相关标签:
3条回答
  • 2021-01-04 03:31

    Maybe you need to use plot_surface instead?

    import matplotlib.pylab as plt
    from matplotlib import cm 
    from mpl_toolkits.mplot3d import Axes3D
    
    fig = plt.figure(figsize=(8, 8))
    ax = fig.gca(projection='3d')
    
    t = np.linspace(-3, 2, 31)
    s = np.linspace(-3, 2, 31)
    
    T, S = np.meshgrid(t, s)
    
    ax.plot_surface(T * T, sqrt2 * T * S, S * S, cmap=cm.jet, rstride=1, cstride=1)
    
    ax.set_xlabel('$t^2$')
    ax.set_ylabel('$\sqrt{2} s t$')
    ax.set_zlabel('$s^2$')
    
    ax.set_title('line $s = t$ in $\cal F$')
    
    plt.show()
    

    enter image description here

    0 讨论(0)
  • 2021-01-04 03:39

    I had a similar problem with coloring and sizing circles according to a variable which did not work either. So my workaround was to bin the values of the variables and loop over the bins. I masked the data such that the array mask did only contain the data with values in that bin.

    ax.plot_wireframe(mask[i], ..., color="red")
    ax.plot_wireframe(mask[i], ..., color="blue") 
    etc.
    

    I know it's not very elegant but in my case it did the job ;)

    0 讨论(0)
  • 2021-01-04 03:45

    When you use plot_wireframe, each line can only have one color. Instead, you can use plot_surface. To get plot_surface to set the edgecolors, you need to give it facecolors. Then you can set the alpha of facecolors to zero.

    from mpl_toolkits.mplot3d import axes3d
    import matplotlib.pyplot as plt
    from matplotlib import cm
    
    X, Y, Z = axes3d.get_test_data(0.2)
    
    # Normalize to [0,1]
    norm = plt.Normalize(Z.min(), Z.max())
    colors = cm.viridis(norm(Z))
    rcount, ccount, _ = colors.shape
    
    fig = plt.figure()
    ax = fig.gca(projection='3d')
    surf = ax.plot_surface(X, Y, Z, rcount=rcount, ccount=ccount,
                           facecolors=colors, shade=False)
    surf.set_facecolor((0,0,0,0))
    plt.show()
    

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