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:
- Come posso far apparire la mappa dei colori della trama julia come Matlab, anche la scala logaritmica non funziona.
- 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 incamera
opzione. 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))
