Cómo asignar VectorColorFunction a fase (en lugar de magnitud) en VectorPlot

Aug 25 2020

Me gustaría trazar un vector 2D asignando el color a la fase/ángulo de los puntos de datos (en lugar de su magnitud), como ese color utilizado en ComplexPlotla función. Sin embargo, ComplexPlot no tiene el VectorMarker que me gusta usar y mostrar la magnitud de los puntos de datos.

Esto es lo que tengo con

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

También traté de asignar VectorColorFunction -> ArcTan[y/x]pero esto no funciona.

==========Enmienda después de las sugerencias de @mikuszefski ==============

Modifiqué el código paraVectorPlot[{x, y}, {x, -3, 3}, {y, -3, 3}, VectorMarkers -> "CircleArrow", VectorColorFunction -> (ColorData["Hue"][Arg[#3 + I #4]] &)]

Sin embargo, un mensaje de error muestra "ColorData::notent: Hue no es una entidad, clase o etiqueta conocida para ColorData. Use ColorData[] para obtener una lista de entidades".

Encontré un mapa de color disponible "Rainbow"

VectorPlot[{x, y}, {x, -3, 3}, {y, -3, 3}, VectorMarkers -> "CircleArrow", VectorColorFunction -> (ColorData["Rainbow"][Arg[#3 + I #4]] &)]Aquí está el resultado:

Pero "Rainbow" no es una tabla de colores cíclica adecuada para los ángulos de visualización. De todos modos, ahora permitía mapear el color según ángulos (una función definida). El siguiente paso es generar una tabla de colores Hue real que se puede pasar a ColorData, supongo.

Respuestas

2 mikuszefski Aug 25 2020 at 18:21

Mirando los documentos de VectorColorFunctionusted probablemente necesite algo así

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

El VectorPlotpasa automáticamente 5 argumentos, que deberían ser x, y, vx, vyy res decir, la norma. por lo que puede obtener fácilmente el ángulo creando un número complejo a partir de los componentes del vector, es decir, los argumentos 3 y 4. Por lo tanto, debe proporcionar la función pura correspondiente. En contraste con el ejemplo en los documentos, aquí cambio la escala manualmente.

Información... No tengo Mathematica a la mano en este momento, así que no pude probar la respuesta.

Actualizar

Parece que Hueno es válido con ColorData, así que cambié el código anterior a Rainbow. Mirando los ColorFunctiondocumentos para obtenerlo Hue, probablemente debería leer

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

que debe ser equivalente a

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