Jak przypisać VectorColorFunction do fazy (zamiast wielkości) w VectorPlot

Aug 25 2020

Chciałbym wykreślić wektor 2D, przypisując kolor do fazy / kąta punktów danych (zamiast ich wielkości), tak jak kolor używany w ComplexPlotfunkcji. Jednak dawka ComplexPlot nie ma VectorMarkera, którego lubię używać i pokazuje wielkość punktów danych.

To jest to, co mam

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

Próbowałem też przypisać, VectorColorFunction -> ArcTan[y/x]ale to nie działa.

========== Poprawka po sugestiach @mikuszefski ==============

Zmodyfikowałem kod na VectorPlot[{x, y}, {x, -3, 3}, {y, -3, 3}, VectorMarkers -> "CircleArrow", VectorColorFunction -> (ColorData["Hue"][Arg[#3 + I #4]] &)]

Jednak komunikat o błędzie pokazuje: „ColorData :: notent: Hue nie jest znaną jednostką, klasą lub znacznikiem dla ColorData. Użyj ColorData [] jako listy jednostek”.

Znalazłem dostępną mapę kolorów „Tęcza”

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

Ale „Rainbow” nie jest cykliczną tablicą kolorów odpowiednią dla kątów wyświetlania. W każdym razie, teraz pozwala na odwzorowanie kolorów zgodnie z kątami (zdefiniowana funkcja). Następnym krokiem jest wygenerowanie prawdziwej tabeli kolorów Hue, która może zostać przesłana do ColorData.

Odpowiedzi

2 mikuszefski Aug 25 2020 at 18:21

Patrząc na Twoje dokumenty VectorColorFunction, prawdopodobnie potrzebujesz czegoś takiego

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

VectorPlotAutomatycznie przechodzi 5 argumentów, które powinny być x, y, vx, vyi rto jest norma. więc możesz łatwo uzyskać kąt tworzący liczbę zespoloną ze składowych wektora, tj. argument 3 i 4. W związku z tym musisz podać odpowiednią czystą funkcję. W przeciwieństwie do przykładu w dokumentacji, tutaj skaluję ręcznie.

Info ... Nie mam w tej chwili Mathematica pod ręką, więc nie mogłem przetestować odpowiedzi.

Aktualizacja

Wygląda na Hueto, że nie działa z ColorData, więc zmieniłem powyższy kod na Rainbow. Spojrzenie na ColorFunctiondokumentację, aby Hueją zdobyć , prawdopodobnie powinno ją przeczytać

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

co powinno być równoważne z

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