ปัญหาเกี่ยวกับ Plotlegend
ฉันกำลังสร้างพล็อต 3 มิติของฟังก์ชัน En1 และฉันกำหนดสีของมันกับฟังก์ชัน sz1 ด้านล่างซึ่งมีค่าที่ครอบคลุมตั้งแต่ -1 ถึง 1
En1[δ_, g1_, g2_, k_] := 1/2(-I g1 + I g2 -Sqrt[-(g1 + g2 - 2 k + I δ) (g1 + g2 + 2 k + Iδ)] + δ)
vec1[δ_, g1_, g2_,k_] := {{-((I g1 + I g2 + Sqrt[-(g1 + g2 - 2 k + I δ) (g1 + g2 + 2 k + I δ)] - δ)/1), 2 k}}
vec1d[δ_, g1_, g2_,k_] := {{(I g1 + I g2 - Sqrt[-(g1 + g2 - 2 k - I δ) (g1 + g2 + 2 k - I δ)] + δ)/1, 2 k}}
σz = PauliMatrix[3];
σ0 = IdentityMatrix[2];
sz1[δ_, g1_, g2_, k_] := Flatten[vec1d[δ, g1, g2, k]. σz . Transpose[vec1[δ, g1, g2, k]]][[1]]/Flatten[vec1d[δ, g1, g2, k].Transpose[vec1[δ, g1, g2, k]]][[1]]
g1 = 1; g2 = 1;
Plot3D[
{Re[En1[δ, g1, g2, k]]},
{δ, -2, 2}, {k, 0, 2},
ColorFunction -> Function[{δ, k, z}, ColorData["TemperatureMap"][sz1[δ, g1, g2, k]]],
ColorFunctionScaling -> False,
PlotLegends -> BarLegend[{ColorData["TemperatureMap"], {-1, 1}}],
BoxRatios -> {1, 1, 1}
]
sz1ในฐานะที่เราสามารถมองเห็นสีจะตอบสนองต่อการทำงาน อย่างไรก็ตามมีปัญหากับคำอธิบายของฉันเนื่องจากการไล่ระดับสีดูเหมือนจะไม่เป็นเส้นตรง มีวิธีกำหนดสีคำอธิบายแผนภูมิให้แตกต่างกันแบบเชิงเส้นตั้งแต่ -1 ถึง 1 หรือไม่?
ถ้าเราพล็อตsz1เราเห็นว่ามันแปลกเมื่อเทียบกับไฟล์$\delta$ สำหรับ k คงที่กล่าวคือ
Plot3D[{sz1[δ, g1, g2, k]}, {δ, -2, 2}, {k, 0, 2}, AxesLabel -> {"δ", "k"}]
อย่างไรก็ตามสีของพล็อต 3 มิติRe[En1]ไม่แปลกเมื่อเทียบกับสี คุณเห็นเหตุผลสำหรับเรื่องนี้หรือไม่?
คำตอบ
คุณสามารถยกเลิกฟังก์ชันสีในคำอธิบายแผนภูมิได้อย่างชัดเจน:
BarLegend[{ColorData["TemperatureMap"][Rescale[#, {-1, 1}]] &, {-1, 1}}]
หากไม่มีสิ่งนั้นคำอธิบายแผนภูมิจะใช้ช่วงเริ่มต้น 0 ถึง 1 สำหรับฟังก์ชันสี ดังนั้นค่าที่ต่ำกว่าศูนย์จะถูกตัดเป็นสีที่ตรงกับศูนย์
หากต้องการตอบคำถามที่แก้ไขของคุณคุณยังสามารถปรับขนาดฟังก์ชันสีในพล็อตใหม่ได้:
ColorFunction -> Function[{\[Delta], k, z},
ColorData["TemperatureMap"][Rescale[sz1[\[Delta], g1, g2, k], {-1, 1}]]
]
การตั้งค่า ViewPoint -> ด้านบนเพื่อแสดงรูปแบบสีให้ชัดเจนยิ่งขึ้น:
ps มีการพิมพ์ผิดในคำจำกัดความของ En1: ในปัจจัยสุดท้ายฉันคิดว่าคุณตั้งใจให้มีช่องว่างระหว่าง I กับเดลต้า