Grafico della superficie 3D di Julia come Matlab, mappa dei colori in scala logaritmica

Aug 16 2020

Sto cercando di tracciare un grafico di superficie 3D come la figura qui sotto (fonte: Wikipedia ):

Ecco il mio tentativo in julia;

x  = [-2:0.05:2;]
y = [-1:0.05:3;]
z = (1 .-x').^2 .+ 100 .*(y.-x'.^2).^2

minZ = minimum(z[:]);  
maxZ = maximum(z[:]);

c =  minZ .+ (maxZ-minZ).*log.(1 .+z .- minZ) ./ log(1+maxZ-minZ)
Plots.plot(x,y,z,st=:surface,color=cgrad(:jet,c),
xlabel = "x",ylabel="y",zlabel="f(x,y)")

Ecco le mie domande:

  1. Come posso far apparire la mappa dei colori della trama julia come Matlab, anche la scala logaritmica non funziona.
  2. La vista (fotocamera) per Matlab plot Azimuth ed Elevation è (-30,30) mentre l'opzione della fotocamera julia plot non funziona affatto. camera = (-30,30). I valori negativi non sembrano funzionare in cameraopzione. Come posso rendere la vista (opzione x e y) simile a matlab.

Per codice Matlab di riferimento:

clear all;
close all;
hfig = figure(1);

s = 0.05;
X = [-2 : s : 2+s];
Y = [-1 : s : 3+s];
[X, Y] = meshgrid(X, Y);
Z = (1-X).^2 + 100*(Y-X.^2).^2;

% Use log scale of Z for a batter usage of the color spectrum  
minZ = min(Z(:));  
maxZ = max(Z(:));
C = minZ + (maxZ-minZ).*log(1+Z-minZ)./log(1+maxZ-minZ); 


colormap(jet);
surf(X, Y, Z, C, 'EdgeColor', 'none', 'LineStyle', 'none');
 
axis([-2, 2, -1, 3, 0, 2500]);
xlabel('x', 'fontsize', 18);
ylabel('y', 'fontsize', 18);
zlabel('f', 'fontsize', 18);

Grazie

Risposte

1 PrzemyslawSzufel Aug 16 2020 at 01:36

Forse questo sarà utile?

pyplot()
Plots.plot(x,y,z,st=:surface,color=Colors.diverging_palette(20,300,40, logscale=true,  wcolor=colorant"red",dcolor1=colorant"green", dcolor2=colorant"red", b=0.1,d1=1.0,d2=1.0),
       xlabel = "x",ylabel="y",zlabel="f(x,y)",camera=(-30,30))