Vấn đề với Plotlegend

Dec 04 2020

Tôi đang tạo đồ thị 3D của hàm En1 và tôi đang gán màu của nó cho hàm sz1 bên dưới, hàm này chứa các giá trị kéo dài từ -1 đến 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}
]

Như chúng ta có thể thấy, màu sắc đang đáp ứng với chức năng sz1. Tuy nhiên, có một vấn đề với huyền thoại của tôi vì gradient của màu có vẻ không tuyến tính. Có cách nào để áp đặt màu chú giải thay đổi tuyến tính từ -1 đến 1 không?

Nếu chúng tôi lập biểu đồ, sz1chúng tôi thấy rằng điều đó thật kỳ quặc đối với$\delta$ cho một k cố định, tức là,

Plot3D[{sz1[δ, g1, g2, k]}, {δ, -2, 2}, {k, 0, 2}, AxesLabel -> {"δ", "k"}]

Tuy nhiên, màu sắc của cốt truyện 3D Re[En1]không hề khác lạ so với màu sắc. Bạn có thấy lý do nào cho điều này không?

Trả lời

3 tad Dec 04 2020 at 11:45

Bạn có thể chia lại tỷ lệ rõ ràng cho chức năng màu trong chú giải:

BarLegend[{ColorData["TemperatureMap"][Rescale[#, {-1, 1}]] &, {-1, 1}}]

Nếu không có điều đó, nó sẽ xuất hiện chú giải sử dụng phạm vi mặc định từ 0 đến 1 cho hàm màu. Vì vậy, các giá trị dưới 0 được cắt thành màu tương ứng với 0.

Để giải quyết câu hỏi đã sửa đổi của bạn, bạn cũng có thể bán lại chức năng màu trong biểu đồ:

ColorFunction -> Function[{\[Delta], k, z},
   ColorData["TemperatureMap"][Rescale[sz1[\[Delta], g1, g2, k], {-1, 1}]]
] 

Đặt ViewPoint -> Top để hiển thị rõ ràng hơn biến thể màu mang lại:

ps, có một lỗi đánh máy trong định nghĩa của bạn về En1: trong yếu tố cuối cùng, tôi nghĩ bạn định có một khoảng trống giữa I và delta.