Problemi con Plotlegend
Sto realizzando un grafico 3D della funzione En1 e sto attribuendo il suo colore alla funzione sz1 sottostante, che contiene valori compresi tra -1 e 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}
]
Come possiamo vedere, il colore risponde alla funzione sz1. Tuttavia, c'è un problema con la mia leggenda poiché il gradiente di colore non sembra lineare. C'è un modo per imporre al colore della legenda di variare linearmente da -1 a 1?
Se tracciamo sz1vediamo che è strano rispetto al file$\delta$ per un k fisso, cioè
Plot3D[{sz1[δ, g1, g2, k]}, {δ, -2, 2}, {k, 0, 2}, AxesLabel -> {"δ", "k"}]
Tuttavia, il colore della trama 3D di Re[En1]non è dispari rispetto al colore. Vedi qualche motivo per questo?
Risposte
È possibile ridimensionare esplicitamente la funzione colore nella legenda:
BarLegend[{ColorData["TemperatureMap"][Rescale[#, {-1, 1}]] &, {-1, 1}}]
Senza di ciò, sembra che la legenda utilizzi l'intervallo predefinito da 0 a 1 per la funzione colore. Quindi i valori inferiori a zero vengono ritagliati al colore corrispondente a zero.
Per rispondere alla tua domanda rivista, puoi anche ridimensionare la funzione colore nella trama:
ColorFunction -> Function[{\[Delta], k, z},
ColorData["TemperatureMap"][Rescale[sz1[\[Delta], g1, g2, k], {-1, 1}]]
]
L'impostazione di ViewPoint -> Top per mostrare più chiaramente la variazione di colore fornisce:
ps, c'è un errore di battitura nella tua definizione di En1: nell'ultimo fattore penso che tu intenda avere uno spazio tra I e delta.