如何在 VectorPlot 中将 VectorColorFunction 分配给相位(而不是幅度)

How to assign the VectorColorFunction to phase (instead of magnitude) in VectorPlot

我想通过将颜色分配给数据点的 phase/angle(而不是它们的大小)来绘制二维矢量,就像 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 不是已知实体,class,也不是 ColorData 的标签。使用 ColorData[] 获取实体列表。”

我找到了可用的彩色地图“彩虹”

VectorPlot[{x, y}, {x, -3, 3}, {y, -3, 3}, VectorMarkers -> "CircleArrow", VectorColorFunction -> (ColorData["Rainbow"][Arg[#3 + I #4]] &)] 这是结果:

但是“彩虹”不是显示角度的循环颜色table suitable。无论如何,它现在允许根据角度(定义的函数)映射颜色。下一步是生成一个真正的 Hue 颜色 table,我想它可以传递给 ColorData。

查看 VectorColorFunction 的文档,您可能需要类似的东西

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

VectorPlot自动传递5个参数,应该是xyvxvyr即规范。所以你可以很容易地得到角度,从向量分量中创建一个复数,即参数 3 和 4。因此,你必须提供相应的纯函数。与文档中的示例相反,这里我手动重新缩放。

信息...我手头没有 Mathematica,所以我无法测试答案。

更新

看来HueColorData无效,所以我把上面的代码改成了Rainbow。查看 ColorFunction docs 得到 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) ]& )