Cách gán VectorColorFunction thành pha (thay vì độ lớn) trong VectorPlot

Aug 25 2020

Tôi muốn vẽ vector 2D bằng cách gán màu cho pha / góc của các điểm dữ liệu (thay vì độ lớn của chúng), giống như màu được sử dụng trong ComplexPlotchức năng. Tuy nhiên, liều ComplexPlot không có VectorMarker mà tôi thích sử dụng và hiển thị độ lớn của điểm dữ liệu.

Đây là những gì tôi có với

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

Tôi cũng đã cố gắng để chỉ định VectorColorFunction -> ArcTan[y/x]nhưng điều này không hoạt động.

========== Sửa đổi sau đề xuất của @mikuszefski ==============

Tôi đã sửa đổi mã thành VectorPlot[{x, y}, {x, -3, 3}, {y, -3, 3}, VectorMarkers -> "CircleArrow", VectorColorFunction -> (ColorData["Hue"][Arg[#3 + I #4]] &)]

Tuy nhiên, một thông báo lỗi hiển thị "ColorData :: notent: Hue không phải là một thực thể, lớp hoặc thẻ đã biết cho ColorData. Sử dụng ColorData [] cho danh sách các thực thể."

Tôi đã tìm thấy một bản đồ màu có sẵn "Rainbow"

VectorPlot[{x, y}, {x, -3, 3}, {y, -3, 3}, VectorMarkers -> "CircleArrow", VectorColorFunction -> (ColorData["Rainbow"][Arg[#3 + I #4]] &)] Đây là kết quả:

Nhưng "Rainbow" không phải là bảng màu theo chu kỳ phù hợp với các góc hiển thị. Dù sao, bây giờ nó đã cho phép ánh xạ màu theo các góc độ (một chức năng được xác định). Bước tiếp theo là tạo một bảng màu Huế thực có thể được chuyển đến ColorData, tôi đoán vậy.

Trả lời

2 mikuszefski Aug 25 2020 at 18:21

Nhìn vào Docs chắc các VectorColorFunctionbạn cũng cần một thứ như vậy

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

Các VectorPlottự động qua 5 đối số, mà nên x, y, vx, vyrtức là chuyện bình thường. vì vậy bạn có thể dễ dàng nhận được góc tạo ra một số phức từ các thành phần vectơ, tức là đối số 3 và 4. Do đó, bạn phải cung cấp hàm thuần túy theo. Ngược lại với ví dụ trong tài liệu, ở đây tôi bán lại theo cách thủ công.

Thông tin ... Tôi không có Mathematica trong tay ngay bây giờ, vì vậy tôi không thể kiểm tra câu trả lời.

Cập nhật

Có vẻ như điều đó Huekhông hợp lệ với ColorData, vì vậy tôi đã thay đổi mã trên thành Rainbow. Nhìn vào ColorFunctiontài liệu để lấy Huenó có lẽ nên đọc

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

mà phải tương đương với

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