Jak przypisać VectorColorFunction do fazy (zamiast wielkości) w VectorPlot
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
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) ]& )