Julia 3D bề mặt âm mưu như Matlab, bản đồ màu theo thang log

Aug 16 2020

Tôi đang cố gắng vẽ sơ đồ bề mặt 3D như hình bên dưới (nguồn: Wikipedia ):

Đây là nỗ lực của tôi trong 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)")

Đây là những câu hỏi của tôi:

  1. Làm thế nào tôi có thể nhận được bản đồ màu của lô julia xuất hiện giống như Matlab, ngay cả quy mô nhật ký cũng không hoạt động.
  2. View (camera) cho Matlab plot Azimuth and Elevation là (-30,30) trong khi tùy chọn camera julia plot hoàn toàn không hoạt động. camera = (-30,30). Giá trị âm dường như không hoạt động trong cameratùy chọn. Làm cách nào để tôi có thể làm cho khung nhìn (tùy chọn x và y) xuất hiện tương tự như matlab.

Để tham khảo codel Matlab:

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);

Cảm ơn bạn

Trả lời

1 PrzemyslawSzufel Aug 16 2020 at 01:36

Có lẽ điều này sẽ hữu ích?

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))