Cara menetapkan VectorColorFunction ke fase (bukan besaran) di VectorPlot

Aug 25 2020

Saya ingin memplot vektor 2D dengan menetapkan warna ke fase / sudut titik data (bukan besarnya), seperti warna yang digunakan dalam ComplexPlotfungsi. Namun, dosis ComplexPlot tidak memiliki VectorMarker yang saya suka gunakan dan menunjukkan besarnya titik data.

Inilah yang saya dapatkan

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

Saya juga mencoba untuk menugaskan VectorColorFunction -> ArcTan[y/x]tetapi ini tidak berhasil.

========== Perubahan setelah saran dari @mikuszefski ==============

Saya mengubah kodenya menjadi VectorPlot[{x, y}, {x, -3, 3}, {y, -3, 3}, VectorMarkers -> "CircleArrow", VectorColorFunction -> (ColorData["Hue"][Arg[#3 + I #4]] &)]

Namun, pesan kesalahan menunjukkan "ColorData :: notent: Hue bukan entitas, kelas, atau tag yang dikenal untuk ColorData. Gunakan ColorData [] untuk daftar entitas."

Saya menemukan peta warna "Pelangi" yang tersedia

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

Tapi "Pelangi" bukanlah tabel warna siklik yang cocok untuk sudut tampilan. Bagaimanapun, sekarang memungkinkan memetakan warna sesuai dengan sudut (fungsi yang ditentukan). Langkah selanjutnya adalah menghasilkan tabel warna Hue nyata yang dapat diteruskan ke ColorData, saya kira.

Jawaban

2 mikuszefski Aug 25 2020 at 18:21

Melihat Dokumen VectorColorFunctionAnda mungkin membutuhkan sesuatu seperti itu

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

The VectorPlototomatis melewati 5 argumen, yang harus x, y, vx, vydan ryaitu norma. sehingga Anda dapat dengan mudah mendapatkan sudut yang membuat bilangan kompleks dari komponen vektor, yaitu argumen 3 dan 4. Oleh karena itu, Anda harus menyediakan fungsi murni yang sesuai. Berbeda dengan contoh di docs, disini saya rescale secara manual.

Info ... Saya tidak memiliki Mathematica sekarang, jadi saya tidak dapat menguji jawabannya.

Memperbarui

Sepertinya itu Huetidak valid dengan ColorData, jadi saya mengubah kode di atas menjadi Rainbow. Melihat ColorFunctiondokumen untuk mendapatkannya Huemungkin harus dibaca

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

yang seharusnya setara dengan

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