Matlab-多曲面畫法和多ColorMap表示

爲了避免自己忘記,寫個筆記吧。

先上效果圖:

 

然後是代碼,主要是爲了自己不忘記,而且自己是新手,所以沒有遵守代碼規範,有問題評論問我吧。

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章