วิธีกำหนด VectorColorFunction ให้กับเฟส (แทนขนาด) ใน VectorPlot

Aug 25 2020

ฉันต้องการลงจุดเวกเตอร์ 2 มิติโดยกำหนดสีให้กับเฟส / มุมของจุดข้อมูล (แทนที่จะเป็นขนาด) เช่นเดียวกับสีที่ใช้ใน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]] &)] นี่คือผลลัพธ์:

แต่ "Rainbow" ไม่ใช่ตารางสีแบบวงกลมที่เหมาะสำหรับมุมแสดงผล อย่างไรก็ตามตอนนี้อนุญาตให้แมปสีตามมุม (ฟังก์ชันที่กำหนด) ขั้นตอนต่อไปคือการสร้างตารางสี 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) ]& )