Come assegnare VectorColorFunction alla fase (anziché alla grandezza) in VectorPlot

Aug 25 2020

Vorrei tracciare il vettore 2D assegnando il colore alla fase/angolo dei punti dati (invece della loro grandezza), come quel colore usato in ComplexPlotfunzione. Tuttavia, ComplexPlot dose non ha il VectorMarker che mi piace usare e mostra la grandezza dei punti dati.

Questo è quello che ho ottenuto con

VectorPlot[{x, y}, {x, -3, 3}, {y, -3, 3}, VectorMarkers -> "CircleArrow", VectorColorFunction -> Hue]

Ho anche provato ad assegnare VectorColorFunction -> ArcTan[y/x]ma questo non funziona.

==========Emendamento dopo i suggerimenti di @mikuszefski ==============

Ho modificato il codice inVectorPlot[{x, y}, {x, -3, 3}, {y, -3, 3}, VectorMarkers -> "CircleArrow", VectorColorFunction -> (ColorData["Hue"][Arg[#3 + I #4]] &)]

Tuttavia, un messaggio di errore mostra "ColorData::notent: Hue non è un'entità, una classe o un tag noto per ColorData. Usa ColorData[] per un elenco di entità."

Ho trovato una mappa dei colori disponibile "Arcobaleno"

VectorPlot[{x, y}, {x, -3, 3}, {y, -3, 3}, VectorMarkers -> "CircleArrow", VectorColorFunction -> (ColorData["Rainbow"][Arg[#3 + I #4]] &)]Ecco il risultato:

Ma "Rainbow" non è una tabella di colori ciclica adatta agli angoli di visualizzazione. Ad ogni modo, ora permetteva di mappare il colore in base agli angoli (una funzione definita). Il prossimo passo è generare una vera tabella di colori Hue che può essere passata a ColorData, immagino.

Risposte

2 mikuszefski Aug 25 2020 at 18:21

Guardando i documenti di VectorColorFunctionte probabilmente hai bisogno di qualcosa del genere

VectorColorFunction -> (ColorData["Rainbow", (Pi + Arg[#3 + I #4])/ (2 Pi) ]&)

VectorPlotautomaticamente passa 5 argomenti, che dovrebbero essere x, y, vx, vye cioè la rnorma. quindi puoi facilmente ottenere l'angolo creando un numero complesso dalle componenti del vettore, cioè argomento 3 e 4. Quindi, devi fornire la funzione pura corrispondente. Contrariamente all'esempio nei documenti, qui ridimensiono manualmente.

Info... Non ho Mathematica a portata di mano in questo momento, quindi non ho potuto testare la risposta.

Aggiornare

Sembra che Huenon sia valido con ColorData, quindi ho modificato il codice precedente in Rainbow. Guardando i ColorFunctiondocumenti per ottenerlo Hueprobabilmente dovresti leggere

VectorColorFunction -> Function[ { x, y, v, w, r }, Hue[ (Pi + Arg[ v + I w ]) / (2 Pi) ] ]

che dovrebbe essere equivalente a

VectorColorFunction -> ( Hue[ (Pi + Arg[ #3 + I #4 ] ) / (2 Pi) ]& )