Problèmes avec Plotlegend
Je fais un tracé 3D de la fonction En1 et j'attribue sa couleur à la fonction sz1 ci-dessous, qui contient des valeurs allant de -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}
]

Comme on peut le voir, la couleur répond à la fonction sz1
. Cependant, il y a un problème avec ma légende car le dégradé de couleur ne semble pas linéaire. Existe-t-il un moyen d'imposer une variation linéaire de la couleur de la légende de -1 à 1?
Si nous traçons, sz1
nous voyons que c'est étrange par rapport à la$\delta$ pour un k fixe, ie,
Plot3D[{sz1[δ, g1, g2, k]}, {δ, -2, 2}, {k, 0, 2}, AxesLabel -> {"δ", "k"}]

Cependant, la couleur du tracé 3D de Re[En1]
n'est pas étrange par rapport à la couleur. Voyez-vous une raison à cela?
Réponses
Vous pouvez redimensionner explicitement la fonction de couleur dans la légende:
BarLegend[{ColorData["TemperatureMap"][Rescale[#, {-1, 1}]] &, {-1, 1}}]
Sans cela, il semble que la légende utilise la plage par défaut de 0 à 1 pour la fonction de couleur. Ainsi, les valeurs inférieures à zéro sont coupées à la couleur correspondant à zéro.
Pour répondre à votre question révisée, vous pouvez également redimensionner la fonction de couleur dans le tracé:
ColorFunction -> Function[{\[Delta], k, z},
ColorData["TemperatureMap"][Rescale[sz1[\[Delta], g1, g2, k], {-1, 1}]]
]
Définir ViewPoint -> Top pour montrer plus clairement la variation de couleur donne:

ps, il y a une faute de frappe dans votre définition de En1: dans le dernier facteur, je pense que vous avez l'intention d'avoir un espace entre I et delta.