Line colour of 3D parametric curve in python's matplotlib.pyplot

后端 未结 2 1135
忘了有多久
忘了有多久 2020-12-05 07:39

I\'ve been googling quite some time with no success ... maybe my keywords are just lousy. Anyway, suppose I have three 1D numpy.ndarrays of the same length I\'d

相关标签:
2条回答
  • 2020-12-05 08:18

    You can plot every line segment separately, as shown below. This just loops over 6 predefined colors, since @askewchan's answer already demonstrates well how to use a colormap.

    cols = 'rgbcmy'
    
    for i in range(len(x)-1):
        ax.plot(x[i:i+2], y[i:i+2], z[i:i+2], color=cols[i%6])
    

    enter image description here

    0 讨论(0)
  • 2020-12-05 08:42

    As with normal 2d plots, you cannot have a gradient of color along an ordinary line. However, you can do it with scatter:

    import matplotlib as mpl
    from mpl_toolkits.mplot3d import Axes3D
    import numpy as np
    import matplotlib.pyplot as plt
    
    fig = plt.figure()
    ax = fig.gca(projection='3d')
    theta = np.linspace(-4 * np.pi, 4 * np.pi, 100)
    z = np.linspace(-2, 2, 100)
    r = z**2 + 1
    x = r * np.sin(theta)
    y = r * np.cos(theta)
    
    #1 colored by value of `z`
    ax.scatter(x, y, z, c = plt.cm.jet(z/max(z))) 
    
    #2 colored by index (same in this example since z is a linspace too)
    N = len(z)
    ax.scatter(x, y, z, c = plt.cm.jet(np.linspace(0,1,N)))
    
    plt.show()
    

    I liked @Junuxx's hack so I applied it here:

    for i in xrange(N-1):
        ax.plot(x[i:i+2], y[i:i+2], z[i:i+2], color=plt.cm.jet(255*i/N))
    

    2-Color by index 2-Color lines by index

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