如何在 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个参数,应该是x
、y
、vx
、vy
和r
即规范。所以你可以很容易地得到角度,从向量分量中创建一个复数,即参数 3 和 4。因此,你必须提供相应的纯函数。与文档中的示例相反,这里我手动重新缩放。
信息...我手头没有 Mathematica,所以我无法测试答案。
更新
看来Hue
对ColorData
无效,所以我把上面的代码改成了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) ]& )
我想通过将颜色分配给数据点的 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个参数,应该是x
、y
、vx
、vy
和r
即规范。所以你可以很容易地得到角度,从向量分量中创建一个复数,即参数 3 和 4。因此,你必须提供相应的纯函数。与文档中的示例相反,这里我手动重新缩放。
信息...我手头没有 Mathematica,所以我无法测试答案。
更新
看来Hue
对ColorData
无效,所以我把上面的代码改成了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) ]& )