Pregunta

Estoy tratando de trama de línea 3D trayectorias que evolucionan con el tiempo, y me gustaría que los colores cambian para mostrar que el paso del tiempo (por ejemplo,de azul claro a azul oscuro).Sin embargo, hay una clara falta de tutoriales para el uso de matplotlib del Line3DCollection; este es el más cercano Pude encontrar, pero todo lo que estoy consiguiendo es una línea blanca.

Aquí está mi código.

import matplotlib.pyplot as plot
from mpl_toolkits.mplot3d.axes3d import Axes3D
from mpl_toolkits.mplot3d.art3d import Line3DCollection
import numpy as np

# X has shape (3, n)
c = np.linspace(0, 1., num = X.shape[1])[::-1]
a = np.ones(shape = c.shape[0])
r = zip(a, c, c, a) # an attempt to make red vary from light to dark

# r, which contains n tuples of the form (r,g,b,a), looks something like this:
# [(1.0, 1.0, 1.0, 1.0), 
# (1.0, 0.99998283232330165, 0.99998283232330165, 1.0),
# (1.0, 0.9999656646466033, 0.9999656646466033, 1.0),
# (1.0, 0.99994849696990495, 0.99994849696990495, 1.0),
# ..., 
# (1.0, 1.7167676698312416e-05, 1.7167676698312416e-05, 1.0),
# (1.0, 0.0, 0.0, 1.0)]

fig = plot.figure()
ax = fig.gca(projection = '3d')

points = np.array([X[0], X[1], X[2]]).T.reshape(-1, 1, 3)
segs = np.concatenate([points[:-1], points[1:]], axis = 1)
lc = Line3DCollection(segs, colors = r)
ax.add_collection3d(lc)

ax.set_xlim(-0.45, 0.45)
ax.set_ylim(-0.4, 0.5)
ax.set_zlim(-0.45, 0.45)

plot.show()

Sin embargo, he aquí lo que me sale:

3d temporal color change plot

Sólo un montón de blanco segmentos de línea, sin cambio en el color.¿Qué estoy haciendo mal?Gracias!

¿Fue útil?

Solución

Tu código funciona bien, aquí hay un poco de muestra.Básicamente, este es su código con un conjunto X personalizado.

fig = plot.figure();
ax = fig.gca(projection = '3d')
X = [(0,0,0,1,0),(0,0,1,0,0),(0,1,0,0,0)]
points = np.array([X[0], X[1], X[2]]).T.reshape(-1, 1, 3)
r = [(1.0, 1.0, 1.0, 1.0), (1.0, 0.75, 0.75, 1.0), (1.0, 0.5, 0.5, 1.0), (1.0, 0.25, 0.25, 1.0), (1.0, 0.0, 0.0, 1.0)];

segs = np.concatenate([points[:-1], points[1:]], axis = 1)
ax.add_collection(Line3DCollection(segs,colors=list(r)))

plot.show()

y la trama se ve así:

ingrese la descripción de la imagen aquí

Otros consejos

Wow, por lo que resulta que el problema era que X en realidad era no de forma (3, n), sino más bien algo como (3, n^10), pero yo sólo estaba tramando n puntos, por lo tanto el color parecía no cambiar nunca (y por qué r parece tener muy pequeños intervalos...había algo así como más de 58.000 puntos cuando yo estaba conspirando sólo 250).

Así que sí, fue un error.Lo siento;funciona bien ahora.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top