Como atribuir o VectorColorFunction à fase (em vez da magnitude) no VectorPlot

Aug 25 2020

Gostaria de plotar o vetor 2D atribuindo a cor à fase/ângulo dos pontos de dados (em vez de sua magnitude), como a cor usada na ComplexPlotfunção. No entanto, ComplexPlot não tem o VectorMarker que gosto de usar e mostrar a magnitude dos pontos de dados.

Isso é o que eu tenho com

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

Eu também tentei atribuir VectorColorFunction -> ArcTan[y/x], mas isso não funciona.

==========Alteração após sugestões de @mikuszefski ==============

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

No entanto, uma mensagem de erro mostra "ColorData::notent: Hue não é uma entidade, classe ou tag conhecida para ColorData. Use ColorData[] para obter uma lista de entidades."

Encontrei um mapa de cores disponível "Rainbow"

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

Mas "Rainbow" não é uma tabela de cores cíclica adequada para ângulos de exibição. De qualquer forma, agora permitia mapear a cor de acordo com os ângulos (uma função definida). A próxima etapa é gerar uma tabela de cores Hue real que pode ser passada para ColorData, eu acho.

Respostas

2 mikuszefski Aug 25 2020 at 18:21

Olhando para os documentos de VectorColorFunctionvocê provavelmente precisa de algo assim

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

O VectorPlotpassa automaticamente 5 argumentos, que devem ser x, y, vx, vye rou seja, a norma. para que você possa obter facilmente o ângulo criando um número complexo a partir dos componentes do vetor, ou seja, os argumentos 3 e 4. Portanto, você deve fornecer a função pura correspondente. Em contraste com o exemplo nos documentos, aqui eu redimensiono manualmente.

Info... Eu não tenho o Mathematica disponível agora, então não pude testar a resposta.

Atualizar

Parece que Huenão é válido com ColorData, então mudei o código acima para Rainbow. Olhando para os ColorFunctiondocumentos para obtê Hue-lo, provavelmente deveria ler

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

que deve ser equivalente a

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