Matlab과 같은 Julia 3D 표면도, 로그 스케일의 컬러 맵

Aug 16 2020

아래 그림과 같이 3D 표면도를 플롯하려고합니다 (출처 : Wikipedia ) :

여기에 내 시도가 있습니다 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)")

내 질문은 다음과 같습니다.

  1. 로그 스케일이 작동하지 않는 경우에도 줄리아 플롯 색상 맵이 Matlab처럼 표시되도록하려면 어떻게해야합니까?
  2. Matlab 플롯 방위각 및 고도에 대한 뷰 (카메라)는 (-30,30)이고 줄리아 플롯 카메라 옵션은 전혀 작동하지 않습니다. camera = (-30,30). 음수 값은 camera옵션 에서 작동하지 않는 것 같습니다 . 뷰 (x 및 y 옵션)를 matlab과 유사하게 표시하려면 어떻게해야합니까?

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

감사합니다

답변

1 PrzemyslawSzufel Aug 16 2020 at 01:36

아마도 이것이 유용할까요?

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