Color de línea de la curva paramétrica 3D en pyplon matplotlib.pyplot

He estado buscando en Google bastante tiempo sin éxito … tal vez mis palabras clave son pésimas. De todos modos, supongamos que tengo tres numpy.ndarray 1D de la misma longitud que me gustaría numpy.ndarray en 3D como una trayectoria. Además, me gustaría poder hacer una de las siguientes cosas:

  1. Cambia el color de la línea en función de z
  2. Cambie el color de la línea en función del tiempo (es decir, el índice en las matrices)

Esta demostración tiene un ejemplo de hacer tal curva:

 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) ax.plot(x, y, z) plt.show() 

introduzca la descripción de la imagen aquí

¿Pero como logro 1 o 2 ? ¡Soluciones a solo una o la otra son bienvenidas! Gracias por adelantado.

Al igual que con los gráficos 2d normales, no puede haber un degradado de color a lo largo de una línea ordinaria. Sin embargo, puedes hacerlo con 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() 

Me gustó el hack de @ Junuxx, así que lo apliqué aquí:

 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 colores por índiceLíneas de 2 colores por índice

Puede trazar cada segmento de línea por separado, como se muestra a continuación. Esto simplemente recorre más de 6 colores predefinidos, ya que la respuesta de @ askewchan ya demuestra cómo usar un mapa de colores.

 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]) 

introduzca la descripción de la imagen aquí