Desidero avere i colori corrispondenti a una mappa di colori nella trama del mio quiver 3d. La versione 2d del grafico ha una matrice opzionale che viene utilizzata per mappare i colori alle frecce. Come posso creare lo stesso effetto nella versione 3D?Aggiunta di colori a un grafico del tremito 3D in matplotlib
risposta
I lotti di faretre 3D sono una caratteristica nuova di zecca in 1,4 (e la sua documentazione) potrebbe essere ancora un po 'approssimativa ai bordi. In questo caso possiamo provare a usare il fatto che la faretra è implementata come LineCollection
che (eventualmente) eredita da ScalarMappable
che significa che sa cos'è una mappa di colori e l'artista restituito ha il metodo set_array
.
Sulla base dei documenti here
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.gca(projection='3d')
x, y, z = np.meshgrid(np.arange(-0.8, 1, 0.2),
np.arange(-0.8, 1, 0.2),
np.arange(-0.8, 1, 0.8))
u = np.sin(np.pi * x) * np.cos(np.pi * y) * np.cos(np.pi * z)
v = -np.cos(np.pi * x) * np.sin(np.pi * y) * np.cos(np.pi * z)
w = (np.sqrt(2.0/3.0) * np.cos(np.pi * x) * np.cos(np.pi * y) *
np.sin(np.pi * z))
q = ax.quiver(x, y, z, u, v, w, length=0.1, cmap='Reds', lw=2)
q.set_array(np.random.rand(np.prod(x.shape)))
plt.show()
Tuttavia, noterete i teste sono di un colore diverso rispetto al dell'albero che è a causa di un dettaglio di implementazione del modo in cui è implementato ogni parte è disegnata come se fosse una propria linea.
Utilizzare direttamente le funzioni Norm
e la mappa dei colori e passare il risultato a colors
potrebbe essere un corso migliore.
Che tipo di argomento * richiede * i colori?Avrei indovinato un array dimensionale nxmxkx3 o nxmxkx4, ma non sembra funzionare. –
È possibile uso colors
argomento per specificare i colori personalizzati per ogni freccia, anche se il modo per farlo non è affatto straight-forward (come per matplotlib 2.0.0). Ho specificato in this issue la logica di come viene effettivamente disegnata la trama del quiver e una soluzione per specificare la colorazione. È possibile controllare this gist per un semplice esempio che può generare un grafico simile a questo:
In sintesi, ecco i passi da seguire:
- si supponga di avere una lista (di dimensioni x * y * z) di 3-tuple (o 4-tuple per RGBA) che specificano i valori RGB (tra 0 ~ 1) di ciascun vettore da disegnare.
- filtra le tuple RGB (o RGBA) corrispondenti ai vettori di lunghezza 0 poiché non verranno disegnati in realtà.
- let
[color_1, color_2, ..., color_n]
essere la lista ottenuta dopo il passaggio 2, è necessario specificarecolors=[color_1, color_2, ..., color_n, color_1, color_1, color_2, color_2, ..., color_n, color_n]
poiché in realtà la parte "-" (costituita da 1 riga) di tutte le frecce diverse da zero "->" verrà disegnata per prima, quindi viene il ">" parte (composta da 2 righe).
Spero che questo aiuti.
- 1. Propagazione dell'impulso del grafico Matplotlib in 3d
- 2. Animare un grafico 3D rotante in matplotlib
- 3. Come assegnare un grafico a barre a colori Panda/Matplotlib
- 4. Modifica posizione dell'asse verticale (z) del grafico 3D (Matplotlib)?
- 5. Come assegnare una scala di colori a una variabile in un grafico a dispersione 3D?
- 6. Collegamento di due punti in un grafico a dispersione 3D in Python e matplotlib
- 7. Problema bargra 3D in Matplotlib
- 8. Incorporare un grafico 3D interattivo in PySide
- 9. Impostazione del rapporto di aspetto del grafico 3D
- 10. Animazione 3d scatterplot in matplotlib
- 11. Matplotlib: Annotazione di un diagramma a dispersione 3D
- 12. Modifica del colore di sfondo dei piani degli assi di un grafico 3D matplotlib
- 13. Matplotlib: Formattazione delle date sull'asse x in un grafico a barre 3D
- 14. Trasparenza predefinita del grafico 3D con controllo grafico ASP.NET?
- 15. L'aggiunta di una leggenda a un rgl grafico 3D
- 16. Mappa valori a colori in matplotlib
- 17. Come disattivare la trasparenza nel grafico di scattering 3D di Matplotlib?
- 18. Aggiunta di una matrice a un grafico?
- 19. Google punto grafico a colori
- 20. matplotlib: generazione del grafico vettoriale
- 21. Aggiunta di etichette di valore su un grafico a barre matplotlib
- 22. Animazione del grafico a linee "crescente" in Python/Matplotlib
- 23. Disegnare un grafico di correlazione in matplotlib
- 24. Campo vettoriale 3D in matplotlib
- 25. valore alfa di controllo su grafico a dispersione 3D utilizzando Python e matplotlib
- 26. Aggiornamento dinamico di un grafico a barre in matplotlib
- 27. etichette contorni matplotlib in 3D
- 28. 3D CartoPy simile a Matplotlib-Basemap
- 29. Creazione di un grafico 3D da un array 3D di numpy
- 30. Aggiunta di una linea arbitraria a un grafico matplotlib nel notebook ipython
Hai provato a passarlo alla trama del quiver come argomento di parole chiave ('colors')? http://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html#quiver suggerisce di passare parola chiave args a 'LineCollection', che prende' colors' come uno dei suoi argomenti. –
Oh, sembra che potrebbe essere un po 'più complicato di così, dal momento che 'colors' deve essere una lista di tuple RGBA. Tuttavia, se sai come mappare i colori ai tuoi punti, forse potresti generare l'elenco. Penso che guardare le routine della mappa dei colori potrebbe essere utile: http://matplotlib.org/api/cm_api.html#module-matplotlib.cm –
Potrebbe valere la pena aprire un problema su GH che segnala questo problema. – tacaswell