Как назначить VectorColorFunction фазе (а не величине) в VectorPlot

Aug 25 2020

Я хотел бы построить 2D-вектор, назначив цвет фазе / углу точек данных (вместо их величины), как этот цвет, используемый в ComplexPlotфункции. Однако в ComplexPlot нет того VectorMarker, который я люблю использовать и показывающего величину точек данных.

Это то, что у меня получилось

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

Я тоже пытался назначить, VectorColorFunction -> ArcTan[y/x]но это не работает.

========== Поправка после предложений @mikuszefski ==============

Я изменил код на VectorPlot[{x, y}, {x, -3, 3}, {y, -3, 3}, VectorMarkers -> "CircleArrow", VectorColorFunction -> (ColorData["Hue"][Arg[#3 + I #4]] &)]

Однако сообщение об ошибке показывает: «ColorData :: notent: Hue не является известной сущностью, классом или тегом для ColorData. Используйте ColorData [] для списка сущностей».

Нашла доступную цветовую карту "Радуга"

VectorPlot[{x, y}, {x, -3, 3}, {y, -3, 3}, VectorMarkers -> "CircleArrow", VectorColorFunction -> (ColorData["Rainbow"][Arg[#3 + I #4]] &)] Вот результат:

Но «Радуга» - это не циклическая таблица цветов, подходящая для ракурсов отображения. Во всяком случае, теперь он позволяет отображать цвет в соответствии с углами (определенная функция). Следующим шагом является создание реальной таблицы цветов Hue, которую, я думаю, можно передать в ColorData.

Ответы

2 mikuszefski Aug 25 2020 at 18:21

Глядя на документы, VectorColorFunctionвам наверняка понадобится что-то подобное

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

VectorPlotАвтоматически передает 5 аргументов, которые должны быть x, y, vx, vyи rто есть норма. так что вы можете легко получить угол, создав комплексное число из компонентов вектора, то есть аргумент 3 и 4. Следовательно, вы должны предоставить соответствующую чистую функцию. В отличие от примера в документации, здесь я масштабирую вручную.

Информация ... У меня сейчас нет программы Mathematica под рукой, поэтому я не смог проверить ответ.

Обновлять

Похоже, Hueэто недопустимо ColorData, поэтому я изменил приведенный выше код на Rainbow. Глядя на ColorFunctionдокументы, чтобы получить Hueего, вероятно, следует прочитать

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

что должно быть эквивалентно

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