Plotlegend 관련 문제

Dec 04 2020

En1 함수의 3D 플롯을 만들고 그 색상을 -1에서 1까지의 값을 포함하는 아래의 sz1 함수에 기인하고 있습니다.

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"}]

그러나 3D 플롯의 Re[En1]색상은 색상과 관련하여 이상하지 않습니다. 이것에 대한 이유가 보이십니까?

답변

3 tad Dec 04 2020 at 11:45

범례에서 명시 적으로 색상 함수의 크기를 조정할 수 있습니다.

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

그렇지 않으면 범례는 색상 기능에 대해 기본 범위 0에서 1을 사용합니다. 따라서 0 미만의 값은 0에 해당하는 색상으로 잘립니다.

수정 된 질문을 해결하기 위해 플롯에서 색상 함수의 배율을 다시 조정할 수도 있습니다.

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

ViewPoint-> Top을 설정하여 색상 변화를 더 명확하게 표시하면 다음이 제공됩니다.

추신, En1의 정의에 오타가 있습니다. 마지막 요소에서는 I와 델타 사이에 공백이있을 것이라고 생각합니다.