So weisen Sie die VectorColorFunction in VectorPlot der Phase (anstelle der Größe) zu

Aug 25 2020

Ich möchte einen 2D-Vektor zeichnen, indem ich die Farbe der Phase / dem Winkel der Datenpunkte (anstelle ihrer Größe) zuweise, wie die in der ComplexPlotFunktion verwendete Farbe . ComplexPlot enthält jedoch nicht den VectorMarker, den ich gerne verwende, und zeigt die Größe der Datenpunkte an.

Das habe ich mit

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

Ich habe auch versucht zuzuweisen, VectorColorFunction -> ArcTan[y/x]aber das funktioniert nicht.

========== Änderung nach Vorschlägen von @mikuszefski ==============

Ich habe den Code auf geändert VectorPlot[{x, y}, {x, -3, 3}, {y, -3, 3}, VectorMarkers -> "CircleArrow", VectorColorFunction -> (ColorData["Hue"][Arg[#3 + I #4]] &)]

Eine Fehlermeldung zeigt jedoch "ColorData :: notent: Hue ist keine bekannte Entität, Klasse oder Tag für ColorData. Verwenden Sie ColorData [] für eine Liste von Entitäten."

Ich habe eine verfügbare Farbkarte "Rainbow" gefunden.

VectorPlot[{x, y}, {x, -3, 3}, {y, -3, 3}, VectorMarkers -> "CircleArrow", VectorColorFunction -> (ColorData["Rainbow"][Arg[#3 + I #4]] &)] Hier ist das Ergebnis:

"Rainbow" ist jedoch keine zyklische Farbtabelle, die für Anzeigewinkel geeignet ist. Auf jeden Fall war es jetzt möglich, die Farbe nach Winkeln abzubilden (eine definierte Funktion). Der nächste Schritt besteht darin, eine echte Farbton-Farbtabelle zu erstellen, die an ColorData übergeben werden kann.

Antworten

2 mikuszefski Aug 25 2020 at 18:21

Wenn Sie sich die Dokumente von VectorColorFunctionIhnen ansehen, brauchen Sie wahrscheinlich so etwas

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

Das VectorPlotpassiert automatisch 5 Argumente, die sein sollen x, y, vx, vyund ralso die Norm. So können Sie leicht den Winkel ermitteln, der aus den Vektorkomponenten, dh Argument 3 und 4, eine komplexe Zahl erzeugt. Daher müssen Sie die entsprechende reine Funktion bereitstellen. Im Gegensatz zum Beispiel in den Dokumenten skaliere ich hier manuell neu.

Info ... Ich habe Mathematica momentan nicht zur Hand, daher konnte ich die Antwort nicht testen.

Aktualisieren

Es scheint, dass dies Huenicht gültig ist ColorData, also habe ich den obigen Code in geändert Rainbow. Wenn Sie sich die ColorFunctionDokumente ansehen , um Huesie zu erhalten , sollten Sie sie wahrscheinlich lesen

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

das sollte gleichbedeutend sein mit

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