Как назначить VectorColorFunction фазе (а не величине) в VectorPlot
Я хотел бы построить 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.
Ответы
Глядя на документы, 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) ]& )