Domanda

Sto tentando di tracciare traiettorie 3D line che si evolvono nel tempo, e vorrei che i colori cambino per mostrare quel passare del tempo (ad esempio dal blu chiaro al blu scuro).Tuttavia, vi è una distinta mancanza di tutorial per l'utilizzo del Line3DCollection di Matplotlib; Questo è il più vicino che potevo trovare, ma tutto quello che sto ottenendo è unLinea bianca

Ecco il mio codice.

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()
.

Tuttavia, ecco cosa ottengo:

3D Temporal Color Change Plot

Solo un grappolo di segmenti di linea bianca, nessun cambiamento nel colore.Che cosa sto facendo di sbagliato?Grazie!

È stato utile?

Soluzione

Il tuo codice funziona bene, ecco un po 'di un campione.Fondamentalmente, questo è il tuo codice con un set X personalizzato.

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()
.

E la trama è simile a questo:

Inserire la descrizione dell'immagine qui

Altri suggerimenti

wow, quindi si scopre che il problema era che X era in realtà non di forma (3, n), ma piuttosto qualcosa come (3, n^10), ma stavo solo pianificando i punti n, quindi il colore sembrava mai cambiare (E perché r sembra avere intervalli estremamente piccoli ... c'erano qualcosa come 58.000 punti quando stavo tracciando solo 250).

Quindi sì, è stato un bug.Mi dispiace per quello;Funziona bene ora.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top