Comment attribuer la VectorColorFunction à la phase (au lieu de la magnitude) dans VectorPlot
Je voudrais tracer un vecteur 2D en attribuant la couleur à la phase/angle des points de données (au lieu de leur amplitude), comme cette couleur utilisée dans ComplexPlotla fonction. Cependant, ComplexPlot n'a pas le VectorMarker que j'aime utiliser et montre l'ampleur des points de données.
C'est ce que j'ai avec
VectorPlot[{x, y}, {x, -3, 3}, {y, -3, 3}, VectorMarkers -> "CircleArrow", VectorColorFunction -> Hue]
J'ai aussi essayé d'assigner VectorColorFunction -> ArcTan[y/x]mais cela ne fonctionne pas.
==========Amendement suite aux suggestions de @mikuszefski ==============
J'ai modifié le code pourVectorPlot[{x, y}, {x, -3, 3}, {y, -3, 3}, VectorMarkers -> "CircleArrow", VectorColorFunction -> (ColorData["Hue"][Arg[#3 + I #4]] &)]
Cependant, un message d'erreur indique "ColorData ::notent : Hue n'est pas une entité, une classe ou une balise connue pour ColorData. Utilisez ColorData[] pour une liste d'entités."
J'ai trouvé une carte de couleur disponible "Rainbow"
VectorPlot[{x, y}, {x, -3, 3}, {y, -3, 3}, VectorMarkers -> "CircleArrow", VectorColorFunction -> (ColorData["Rainbow"][Arg[#3 + I #4]] &)]Voici le résultat :
Mais "Rainbow" n'est pas une table de couleurs cyclique adaptée aux angles d'affichage. Quoi qu'il en soit, cela permettait désormais de mapper la couleur en fonction des angles (une fonction définie). La prochaine étape consiste à générer une vraie table de couleurs Hue qui peut être transmise à ColorData, je suppose.
Réponses
En regardant les documents VectorColorFunction, vous avez probablement besoin de quelque chose comme ça
VectorColorFunction -> (ColorData["Rainbow", (Pi + Arg[#3 + I #4])/ (2 Pi) ]&)
Le VectorPlotpasse automatiquement 5 arguments, qui doivent être x, y, vx, vyet rc'est-à-dire la norme. vous pouvez donc facilement obtenir l'angle créant un nombre complexe à partir des composants vectoriels, c'est-à-dire les arguments 3 et 4. Par conséquent, vous devez fournir la fonction pure correspondante. Contrairement à l'exemple dans les docs, ici je redimensionne manuellement.
Info... Je n'ai pas Mathematica sous la main en ce moment, donc je n'ai pas pu tester la réponse.
Mise à jour
Il semble que ce Huene soit pas valide avec ColorData, j'ai donc changé le code ci-dessus en Rainbow. En regardant les ColorFunctiondocs pour l'obtenir Huedevrait probablement lire
VectorColorFunction -> Function[ { x, y, v, w, r }, Hue[ (Pi + Arg[ v + I w ]) / (2 Pi) ] ]
qui devrait être équivalent à
VectorColorFunction -> ( Hue[ (Pi + Arg[ #3 + I #4 ] ) / (2 Pi) ]& )