为了避免自己忘记,写个笔记吧。
先上效果图:
然后是代码,主要是为了自己不忘记,而且自己是新手,所以没有遵守代码规范,有问题评论问我吧。
clc;
x_1 = 0.01:0.01:0.99;
x_2 = 1.01:0.01:10.0;
y = 0.01:0.01:0.99;
%五个曲面,定义五组颜色
colormap([parula(32);hot(32);cool(32);winter(32);pink(32)]);
%z1-z5代表五个曲面
% z1
%归一化 把数据用[1,32]之间的数据表示,32是上面定义的颜色数
num(1) = min(z1(:));
num(2) = max(z1(:));
c = min(32,round(31*(z1 - num(1))/(num(2) - num(1)))+1);
%END
h(1) = surf(x_1, y, z1(1:99,:)');
hold on;
h(2) = surf(x_2, y, z1(100:999,:)');
set(h(1),'CData',c(1:99,:)');
set(h(2),'CData',c(100:999,:)');
% z2
%归一化 把数据用[33,64]之间的数据表示
num(3) = min(z2(:));
num(4) = max(z2(:));
c = min(32,round(31*(z2 - num(3))/(num(4) - num(3)))+1) + 32;
%END
h(3) = surf(x_1, y, z2(1:99,:)');
h(4) = surf(x_2, y, z2(100:999,:)');
set(h(3),'CData',c(1:99,:)');
set(h(4),'CData',c(100:999,:)');
% z3
%归一化 把数据用[65,96]之间的数据表示
num(5) = min(z3(:));
num(6) = max(z3(:));
c = min(32,round(31*(z3 - num(5))/(num(6) - num(5)))+1) + 64;
%END
h(5) = surf(x_1, y, z3(1:99,:)');
h(6) = surf(x_2, y, z3(100:999,:)');
set(h(5),'CData',c(1:99,:)');
set(h(6),'CData',c(100:999,:)');
% z4
%归一化 把数据用[97,128]之间的数据表示
num(7) = min(z4(:));
num(8) = max(z4(:));
c = min(32,round(31*(z4 - num(7))/(num(8) - num(7)))+1) + 96;
%END
h(7) = surf(x_1, y, z4(1:99,:)');
h(8) = surf(x_2, y, z4(100:999,:)');
set(h(7),'CData',c(1:99,:)');
set(h(8),'CData',c(100:999,:)');
% z5
%归一化 把数据用[129,160]之间的数据表示
num(9) = min(z5(:));
num(10) = max(z5(:));
c = min(32,round(31*(z5 - num(9))/(num(10) - num(9)))+1) + 128;
%END
h(9) = surf(x_1, y, z5(1:99,:)');
h(10) = surf(x_2, y, z5(100:999,:)');
set(h(9),'CData',c(1:99,:)');
set(h(10),'CData',c(100:999,:)');
ylabel('\tau','Fontname','微软雅黑','fontsize',15);%x轴标记
zlabel('\Delta','Fontname','微软雅黑','fontsize',15, 'rotation',0);%z轴标记
xlabel('\alpha','Fontname','微软雅黑','fontsize',15);%y轴标记
shading interp
%colorbar 设置
str_num = ["0.24087" , "a_1" , "0.45652" , "0.027264", "a_2" , "0.40984" , "0.34316" , "a_3" ,"0.75067" , "0.44156" , "a_4" , "0.99938" , "0.51953" , "a_5" ,"0.74708"];
h = colorbar('YLim',[1 160], 'Ticks',[1 15 31 36 51 63 68 83 95 100 115 127 132 147 160], 'YTicklabel', str_num, 'TickLength',0);