matlab 數據可視化

視覺是人們感覺世界、認識天然的最重要依靠。數據可視化的目的在於:經過圖形,從一堆雜亂的離散數據中觀察數據間的內在關係,感覺由圖形所傳遞的內在本質。MATLAB一貫注重數據的圖形表示,並不斷地採用新技術改進和完備其可視化功能。  
本章將系統地闡述:離散數據表示成圖形的基本機理;曲線、曲面繪製的基本技法和指令;特殊圖形的生成和使用示例;如何使用線型、色彩、數據點標記凸現不一樣數據的特徵;如何利用着色、燈光照明、反射效果、材質體現和透明度處理渲染、烘托表現高維函數的性狀;如何生成和運用標識,畫龍點睛般地註釋圖形;如何顯示和轉換unit8unit16double三種不一樣數據類型所體現的變址、灰度和真彩圖象,如何讀寫各類標準圖象格式文件;如何經過圖形窗的交互操做對圖形進行修飾、調整;如何打印和輸出圖形文件。  
本章的圖形指令只涉及MATLAB"高層"繪圖指令。這種指令的形態和格式友善,易於理解和使用。  
整章內容遵循由淺入深、由基本到高級、由算例帶概括的原則。全部算例都是運行實例,易於讀者實踐試驗,並從中掌握通常規律。  
4.1 引導  
4.1.1 離散數據和離散函數的可視化  
【例4.1.1-1】用圖形表示離散函數   
n=0:12;  
y=1./abs(n-6);  
plot(n,y,’r*’,’MarkerSize’,20)  
grid on   
Warning: Divide by zero.  
4.1.2 連續函數的可視化  
【例4.1.2-1】用圖形表示連續調製波形   
t1=(0:11)/11*pi; % <1>  
y1=sin(t1).*sin(9*t1);  
t2=(0:100)/100*pi; % <3>  
y2=sin(t2).*sin(9*t2);  
subplot(2,2,1),plot(t1,y1,’r.’),axis([0,pi,-1,1]),title(’子圖 (1)’)  
subplot(2,2,2),plot(t2,y2,’r.’),axis([0,pi,-1,1]),title(’子圖 (2)’)  
subplot(2,2,3),plot(t1,y1,t1,y1,’r.’)  
axis([0,pi,-1,1]),title(’子圖 (3)’)  
subplot(2,2,4),plot(t2,y2)  
axis([0,pi,-1,1]),title(’子圖 (4)’)   
html

4.2.1 plot的基本調用格式  
【例4.2.1-1】簡單例題,比較方便的試驗指令。  
t=(0:pi/50:2*pi)’;k=0.4:0.1:1;Y=cos(t)*k;plot(t,Y)    

【例4.2.1-2】用圖形表示連續調製波形  及其包絡線。  
t=(0:pi/100:pi)’; % <1>  
y1=sin(t)*[1,-1]; % <2>  
y2=sin(t).*sin(9*t); % <3>  
t3=pi*(0:9)/9; % <4>  
y3=sin(t3).*sin(9*t3);plot(t,y1,’r:’,t,y2,’b’,t3,y3,’bo’) % <5>  
axis([0,pi,-1,1]) % <6>    

【例4.2.1-3】用複數矩陣形式畫Lissajous圖形。(在模擬信號時代,Lissajous圖形經常使用來測量信號的頻率。)  
t=linspace(0,2*pi,80)’; % <1>  
X=[cos(t),cos(2*t),cos(3*t)]+i*sin(t)*[1, 1, 1]; %(80x3)的複數矩陣  
plot(X) % <3>  
axis square % <4>  
legend(’1’,’2’,’3’)    

【例4.2.1-4】採用模型 畫一組橢圓。  
th = [0:pi/50:2*pi]’;  
a = [0.5:.5:4.5];  
X = cos(th)*a;  
Y = sin(th)*sqrt(25-a.^2);  
plot(X,Y),axis(’equal’),xlabel(’x’), ylabel(’y’)  
title(’A set of Ellipses’)    

4.2.2 曲線的色彩、線型和數據點形  
4.2.2.1 色彩和線型  
4.2.2.2 數據點形  
【例4.2.2.2-1】用圖形演示平面上一個方塊四個頂點在仿射投影(Affine Projection)下的位置、形狀變化。  
 
p1=[-0.5,0,1]’;p2=[-0.5,1,1]’;p3=[0.5,1,1]’;p4=[0.5,0,1]’;  
Sq=[p1,p2,p3,p4,p1];  
 
dx=0.5;dy=1;T=[1,0,dx;0,1,dy;0,0,1];  
 
th=pi/6;R=[cos(th),-sin(th),0;sin(th),cos(th),0;0,0,1];  
 
alpha=2;beta=3;S=[alpha,0,0;0,beta,0;0,0,1];  
E=eye(3,3);% <10>  
TRS={E,T,R,S}; %<11>  
ss={’r^’,’rd’,’rp’,’rh’}; %<12>  
tt={’Original Square’,’Translation’,’Rotation’,’Scaling’};  
% <13>  
for i=1:4  
W=TRS{i}*Sq; %  
subplot(2,2,i)  
for k=1:4  
plot(W(1,k),W(2,k),ss{k}); % <19>  
axis([-3,3,-1,5]),axis equal  
hold on % <21>  
end  
plot(W(1,:),W(2,:)) % <23>  
grid on %  
title(tt{i}) %  
hold off %  
end  

4.2.3 座標、刻度和分格線控制  
4.2.3.1 座標控制  
【例4.2.3.1-1】觀察各類軸控制指令的影響。演示採用長軸爲3.25,短軸爲1.15的橢圓。注意:採用多子圖表現時,圖形形狀不只受"控制指令"影響,並且受整個圖面"寬高比""子圖數目"的影響。本書這樣處理,是出於篇幅考慮。讀者欲想準確體會控制指令的影響,請在全圖狀態下進行觀察。(圖4.2-6  
t=0:2*pi/99:2*pi;  
x=1.15*cos(t);y=3.25*sin(t); %  
subplot(2,3,1),plot(x,y),axis normal,grid on,  
title(’Normal and Grid on’)  
subplot(2,3,2),plot(x,y),axis equal,grid on,title(’Equal’)  
subplot(2,3,3),plot(x,y),axis square,grid on,title(’Square’)  
subplot(2,3,4),plot(x,y),axis image,box off,title(’Image and Box off’)  
subplot(2,3,5),plot(x,y),axis image fill,box off  
title(’Image and Fill’)  
subplot(2,3,6),plot(x,y),axis tight,box off,title(’Tight’)    

4.2.3.2 刻度、分格線和座標框  
【例4.2.3.2-1】經過繪製二階系統階躍響應,綜合演示圖形標識。本例比較綜合,涉及的指令較廣。請讀者耐心讀、實際作、再看例後說明,定會有匪淺收益。(圖4.2-7   
clf;t=6*pi*(0:100)/100;y=1-exp(-0.3*t).*cos(0.7*t);  
tt=t(find(abs(y-1)>0.05));ts=max(tt); %<2>  
plot(t,y,’r-’,’LineWidth’,3) %<3>  
axis([-inf,6*pi,0.6,inf]) %<4>  
set(gca,’Xtick’,[2*pi,4*pi,6*pi],’Ytick’,[0.95,1,1.05,max(y)]) %<5>  
grid on %<6>  
title(’\it y = 1 - e^{ -\alphat}cos{\omegat}’) %<7>  
text(13.5,1.2,’\fontsize{12}{\alpha}=0.3’) %<8>  
text(13.5,1.1,’\fontsize{12}{\omega}=0.7’) %<9>  
hold on;plot(ts,0.95,’bo’,’MarkerSize’,10);hold off %<10>  
cell_string{1}=’\fontsize{12}\uparrow’; %<11>  
cell_string{2}=’\fontsize{16} \fontname{隸書}鎮定時間’; %<12>  
cell_string{3}=’\fontsize{6}  ’; %<13>  
cell_string{4}=[’\fontsize{14}\rmt_{s} = ’ num2str(ts)]; %<14>  
text(ts,0.85,cell_string) %<15>  
xlabel(’\fontsize{14} \bft \rightarrow’) %<16>  
ylabel(’\fontsize{14} \bfy \rightarrow’)   %<17>   

4.2.4 圖形標識  
4.2.4.1 簡捷指令形式  
4.2.4.2 精細指令形式  
【例4.2.4.2-1】本例很是簡單,專供試驗標識用。  
clf;t=0:pi/50:2*pi;y=sin(t);plot(t,y);axis([0,2*pi,-1.2,1.2])  
text(pi/2,1,’\fontsize{16}\leftarrow\itsin(t)\fontname{隸書}極大值’)    

4.2.5 屢次疊繪、雙縱座標和多子圖  
4.2.5.1 屢次疊繪  
【例4.2.5.1-1】利用hold繪製離散信號經過零階保持器後產生的波形。  
t=2*pi*(0:20)/20;y=cos(t).*exp(-0.4*t);  
stem(t,y,’g’);hold on;stairs(t,y,’r’);hold off    

4.2.5.2 雙縱座標圖  
【例4.2.5.2-1】畫出函數 和積分 在區間 上的曲線。  
clf;dx=0.1;x=0:dx:4;y=x.*sin(x);s=cumtrapz(y)*dx; %梯形法求累計積分  
plotyy(x,y,x,s),text(0.5,0,’\fontsize{14}\ity=xsinx’)  
sint=’{\fontsize{16}\int_{\fontsize{8}0}^{  x}}’;  
text(2.5,3.5,[’\fontsize{14}\its=’,sint,’\fontsize{14}\itxsinxdx’])    

【例4.2.5.2-2】受熱壓力容器的指望溫度是120度,指望壓力是0.25Mpa。在同一張圖上畫出它們的階躍響應曲線。  
S1=tf([1 1],[1 3  2  1]);  
S2=tf(1,[1 1 1]);  
[Y1,T1]=step(S1);  
[Y2,T2]=step(S2);  
plotyy(T1,120*Y1,T2,0.25*Y2,’stairs’,’plot’)    

4.2.5.3 多子圖  
【例4.2.5.3-1】演示subplot指令對圖形窗的分割。  
clf;t=(pi*(0:1000)/1000)’;  
y1=sin(t);y2=sin(10*t);y12=sin(t).*sin(10*t);  
subplot(2,2,1),plot(t,y1);axis([0,pi,-1,1])  
subplot(2,2,2),plot(t,y2);axis([0,pi,-1,1])  
subplot(’position’,[0.2,0.05,0.6,0.45]) %<5>  
plot(t,y12,’b-’,t,[y1,-y1],’r:’);axis([0,pi,-1,1])    

4.2.6 交互式圖形指令  
4.2.6.1 ginput  
4.2.6.2 gtext  
4.2.6.3 legend  
4.2.6.4 zoom 
spring

4.3.1 三維線圖指令plot3  
【例4.3.1-1】簡單例題。  
t=(0:0.02:2)*pi;x=sin(t);y=cos(t);z=cos(2*t);  
plot3(x,y,z,’b-’,x,y,z,’bd’),view([-82,58]),box on,legend(’’,’寶石’)    

4.3.2 三維網線圖和曲面圖  
4.3.2.1 三維圖形的數據準備  
4.3.2.2 網線圖、曲面圖基本指令格式  
【例4.3.2.2-1】用曲面圖表現函數   
clf,x=-4:4;y=x;[X,Y]=meshgrid(x,y);  
Z=X.^2+Y.^2;  
surf(X,Y,Z);hold on,colormap(hot)  
stem3(X,Y,Z,’bo’)    

4.3.3 透視、鏤空和裁切  
4.3.3.1 圖形的透視  
【例4.3.3.1-1】透視演示  
[X0,Y0,Z0]=sphere(30);  
X=2*X0;Y=2*Y0;Z=2*Z0;  
surf(X0,Y0,Z0);  
shading interp  
hold on,mesh(X,Y,Z),colormap(hot),hold off  
hidden off  
axis equal,axis off    

4.3.3.2 圖形的鏤空  
【例4.3.3.2-1】演示:如何利用"非數"NaN,對圖形進行剪切處理。  
t=linspace(0,2*pi,100); r=1-exp(-t/2).*cos(4*t);  
[X,Y,Z]=cylinder(r,60);  
ii=find(X<0&Y<0);  
Z(ii)=NaN;  
surf(X,Y,Z);colormap(spring),shading interp  
light(’position’,[-3,-1,3],’style’,’local’)  
material([0.5,0.4,0.3,10,0.3])    

【例4.3.3.2-2】演示:如何利用"非數"NaN,對圖形進行鏤空處理。  
P=peaks(30);P(18:20,9:15)=NaN;  
surfc(P);colormap(summer)  
light(’position’,[50,-10,5]),lighting flat  
material([0.9,0.9,0.6,15,0.4])    

4.3.3.3 裁切  
【例4.3.3.3-1】表現切面  
clf,x=[-8:0.05:8];y=x;[X,Y]=meshgrid(x,y);ZZ=X.^2-Y.^2;  
ii=find(abs(X)>6|abs(Y)>6);  
ZZ(ii)=zeros(size(ii));  
surf(X,Y,ZZ),shading interp;colormap(copper)  
light(’position’,[0,-15,1]);lighting phong  
material([0.8,0.8,0.5,10,0.5])  
數組

 

4.4.1 特殊圖形指令例示  
4.4.1.1 面域圖area  
【例4.4.1.1-1】面域圖指令area 。該指令的特色是:在圖上繪製多條曲線時,每條曲線(除第一條外)都是把""條曲線做基線,再取值繪製而成。所以,該指令所畫的圖形,能醒目地反映各因素對最終結果的貢獻份額。注意:(1area的第一輸入宗量是單調變化的自變量。第二輸入宗量是"各因素"的函數值矩陣,且每一個"因素"的數據取列向量形式排放。第三輸入宗量是繪圖的基準線值,只能取標量。當基準值爲0(即以x軸爲基準線)時,第三輸入宗量能夠缺省。(2)本例第<4>條指令書寫格式x’ , Y’  強調沿列方向畫各條曲線的事實。  
clf;x=-2:2  
Y=[3,5,2,4,1;3,4,5,2,1;5,4,3,2,5]  
Cum_Sum=cumsum(Y)  
area(x’,Y’,0) %<4>  
legend(’因素A’,’因素B’,’因素C’),grid on,colormap(spring)    
x =  
    -2    -1     0     1     2  
Y =  
     3     5     2     4     1  
     3     4     5     2     1  
     5     4     3     2     5  
Cum_Sum =  
     3     5     2     4     1  
     6     9     7     6     2  
    11    13    10     8     7  

4.4.1.2 各類直方圖bar, barh, bar3, bar3h  
【例4.4.1.2-1】二維直方圖有兩種圖型:垂直直方圖和水平直方圖。而每種圖型又有兩種表現模式:累計式:分組式。本例選其兩種加以表現。  
x=-2:2;  
Y=[3,5,2,4,1;3,4,5,2,1;5,4,3,2,5];  
subplot(1,2,1),bar(x’,Y’,’stacked’)  
xlabel(’x’),ylabel(’\Sigma y’),colormap(cool)  
legend(’因素A’,’因素B’,’因素C’)  
subplot(1,2,2),barh(x’,Y’,’grouped’)  
xlabel(’y’),ylabel(’x’)    

【例4.4.1.2-2】用三維直方圖表現上例數據。  
clf;x=-2:2;  
Y=[3,5,2,4,1;3,4,5,2,1;5,4,3,2,5];  
subplot(1,2,1),bar3(x’,Y’,1)  
xlabel(’因素ABC’),ylabel(’x’),zlabel(’y’)  
colormap(summer)  
subplot(1,2,2),bar3h(x’,Y’,’grouped’)  
ylabel(’y’),zlabel(’x’)    

4.4.1.3 餅圖pie, pie3  
【例4.4.1.3-1】餅圖指令pie , pie3 用來表示各元素佔總和的百分數。該指令第二輸入宗量爲與第一宗量同長的0-1向量,1使對應扇塊突出。  
a=[1,1.6,1.2,0.8,2.1];  
subplot(1,2,1),pie(a,[1 0 1 0 0]),legend({’1’,’2’,’3’,’4’,’5’})  
subplot(1,2,2),pie3(a,a==min(a)),colormap(cool)    
4.4.1.4 填色圖fill,fill3  
【例4.4.1.4-1】讀者試驗本例時,注意三點:MATLAB畫任意多邊形的一種方法;保證繪圖數據首尾重合,使勾畫多邊形封閉;使用圖柄對圖形的屬性進行精細設置。  
clf;n=10;  
dt=2*pi/n;t=0:dt:2*pi;  
t=[t,t(1)];  
x=sin(t);y=cos(t);  
fill(x,y,’c’);axis off  
ht=text(0,0,’\fontname{隸書}\fontsize{32}十邊形’);  
set(ht,’Color’,’k’,’HorizontalAlignment’,’Center’)   

【例4.4.1.4-2】三維填色指令fill3 演示。注意:(1X,Y,Z的相應列元素構成一個三維封閉多邊形。本例有4列,所以有4個多邊形。圖4.4.1.4-2中的"1234"號三角形分別由X,Y,Z的第1234列生成。(2)爲使多邊形封閉,每列的首尾元素應該重合。若不重合,則將默認把最後一點與第一點相連,強行使多邊形封閉。(3)該指令的第4輸入宗量可取定色單字符(如’r’ , ’g’ 等),也可取與X同維的數值矩陣。(4)所填色彩受C和色圖的雙重響應。(5)本例圖中三角形的編號是經過"圖形窗"編輯而生成的。  
X=[0.5 0.5 0.5 0.5;0.5 0.5 0.5 0.5;0 1 1 0];  
Y=[0.5 0.5 0.5 0.5;0.5 0.5 0.5 0.5;0 0 1 1];  
Z=[1 1 1 1;0 0 0 0;0 0 0 0];C=[1 0 0 1;0 1 0 1;0 0 1 0];  
fill3(X,Y,Z,C),view([-10 55]),colormap cool  
xlabel(’x’),ylabel(’y’),box on;grid on    

4.4.1.5 射線圖compass和羽毛圖feather  
【例4.4.1.5-1 compassfeather指令的區別。  
t=-pi/2:pi/12:pi/2;  
r=ones(size(t));  
[x,y]=pol2cart(t,r);  
subplot(1,2,1),compass(x,y),title(’Compass’)  
subplot(1,2,2),feather(x,y),title(’Feather’)    
4.4.1.6 Voronoi圖和三角剖分  
【例4.4.1.6-1】用Voronoi多邊形勾畫每一個點的最近鄰範圍。Voronoi多邊形在計算幾何、模式識別中有重要應用。從本例圖4.4-8中,能夠看到,三角形頂點所在多邊形的三條公共邊是剖分三角形邊的垂直平分線。  
clf;rand(’state’,111)    
n=30;A=rand(n,1)-0.5;B=rand(n,1)-0.5;  
T=delaunay(A,B);  
T=[T T(:,1)];  
voronoi(A,B)  
hold on;axis square  
fill(A(T(10,:)),B(T(10,:)),’y’);  
voronoi(A,B)    

4.4.1.7 綵帶圖ribbon  
【例4.4.1.7-1】用綵帶繪圖指令ribbon ,繪製歸化二階系統 在不一樣 值時的階躍響應,如圖4.4-9所示。對於本例程序,有如下幾點值得注意:(1)程序中使用了Control Toolbox中的兩個指令tf step 。這tf 是一個"對象"。(2)本例構做的S是一個單輸入8輸出系統,做用於該Sstep指令也將在一次調用中產生8個子系統的階躍響應。(3)在下段程序運行後,有興趣的讀者可顯示,以觀察系統是如何描寫的。(4)本例爲了獲得較好的表現效果,採用了視角、明暗、色圖、光照控制。(5)爲使程序有必定通用性,圖例採用元胞數組生成。(6)本例產生的圖4.4.1.7-1中,除" "外,全部標識都是由下段指令產生的。(7" "中的斜向箭頭沒法由指令生成,而是直接經過"圖形窗"編輯實現的。(8)本例程序有通用性。只要修改第<2>條指令對阻尼係數的設定,就可得到相應的綵帶圖形。  
view([150,50]),shading interp,colormap(jet)%  
light,lighting phong,box on %  
for k=1:n;str_lgd{k,1}=num2str(zeta2(k));end,legend(str_lgd)  
str1=’\itG = (s^{2} + 2\zetas + 1)^{-1}’;  
str2=’\fontsize{16}\fontname{隸書}取不一樣’;  
str3=’{\fontsize{10}\it\zeta}’;  
str4=’\fontsize{16}\fontname{隸書}時的階躍響應’;  
title([str1,str2,str3,str4]),zlabel(’\ity(\zeta,t) \rightarrow’)   

4.4.1.8 離散杆圖stem , stem3  
【例4.4.1.8-1】本例表現一個離散方波的快速Fourier變換的幅頻。本例左圖用極座標指令polar繪出,右圖用三維離散杆圖指令stem3 繪出。  
th = (0:127)/128*2*pi;  
rho=ones(size(th));  
x = cos(th);y = sin(th);  
f = abs(fft(ones(10,1),128));  
rho=ones(size(th))+f’;  
subplot(1,2,1),polar(th,rho,’r’)  
subplot(1,2,2),stem3(x,y,f’,’d’,’fill’)  
view([-65 30])    

4.4.1.9 二維半圖指令pcolor, contour, contourf  
【例4.4.1.9-1】本例重點演示所謂"二維半"指令:僞彩圖pcolor ;等位線指令contour contourf;等位線標高指令 clabel 的配合使用和區別。練習本例時注意:(1)本例等位線指令中的第4輸入宗量n設定高度的等級數,第5輸入宗量設定等位線的線型、色彩。(2)左右兩圖的標高方法不一樣。左圖的標識以"+"引導,水平放置。右圖沿線佈置。這是由clabel的調用格式不一樣產生的。(3)左右兩圖色彩的造成方法不一樣,色彩效果也不一樣。(4)在左圖中,colorbar畫出一根垂直色標尺,而caxis決定該色標尺的刻度。clf;clear;[X,Y,Z]=peaks(40);  
n=4;  
subplot(1,2,1),pcolor(X,Y,Z)  
colormap jet,shading interp  
hold on,C=contour(X,Y,Z,n,’k:’);  
clabel(C)  
zmax=max(max(Z));zmin=min(min(Z));caxis([zmin,zmax])  
colorbar  
hold off,subplot(1,2,2)  
[C,h,CF]=contourf(X,Y,Z,n,’k:’);  
clabel(C,h)  
ide

 

4.5.1 視點控制和圖形的旋動  
4.5.1.1 視點控制view  
4.5.1.2 圖形旋動rotate  
【例 6.5.1.2-1】旋轉指令示例。(利用rotate製做動畫,請看例4.4.4.3-1  
shg;clf;[X,Y] = meshgrid([-2:.2:2]);Z = 4*X.*exp(-X.^2-Y.^2);  
G=gradient(Z);subplot(1,2,1),surf(X,Y,Z,G)  
subplot(1,2,2),h=surf(X,Y,Z,G);  
rotate(h,[-2,-2,0],30,[2,2,0]),colormap(jet)  

4.5.2 色彩控制  
4.5.2.1 用色風格colordef  
4.5.2.2 色圖colormap  
【例4.5.2.2-1】紅綠藍三色色圖。演示:色圖和色圖矩陣。  
CM=[1 0 0;0 1 0;0 0 1];m=size(CM,1);Y=[1:m+1;1:m+1]’;  
pcolor(Y),colormap(CM)    

【例4.5.2.2-2】隨機色圖。演示:色圖和色圖矩陣。  
rand(’seed’,2);CM=rand(16,3);m=size(CM,1);Y=[1:m+1;1:m+1]’;  
pcolor(Y),colormap(CM)    

【例4.5.2.2-3】演示:(A)用MATLAB預約義的兩個色圖矩陣,構成一個更大的色圖陣。(B)把色軸的範圍設置得比着色陣 C的數據範圍小,使色圖CM的兩端色彩展寬,中間色彩壓縮。(C)把色軸的上限增長一個C陣數據寬度,使着色時只使用色圖CM上半陣的色彩。這種方法使同一圖形窗中的不一樣對象實際上可使用MATLAB的不一樣預約義色圖。(D)爲了使色標尺正確反映色軸的設置,指令colorbar必須在caxis 以後使用。  
Z=peaks(20);C=Z;Cmin=min(min(C));Cmax=max(max(C));DC=Cmax-Cmin;  
CM=[autumn;winter]; %<2>  
colormap(CM),subplot(1,3,1),surf(Z,C)  
caxis([Cmin+DC*2/5,Cmax-DC*2/5]),colorbar(’horiz’) %<4>  
subplot(1,3,2),surf(Z,C),colorbar(’horiz’)  
subplot(1,3,3),surf(Z,C),caxis([Cmin,Cmax+DC]),colorbar(’horiz’)%<6>    

4.5.2.3 濃淡處理shading  
【例4.5.2.3-1】三種濃淡處理方式比較。  
clf;Z=peaks(20);colormap(jet)  
subplot(1,3,1),surf(Z)  
subplot(1,3,2),surf(Z),shading flat  
subplot(1,3,3),surf(Z),shading interp    

4.5.3 照明和材質處理  
4.5.3.1 燈光light  
4.5.3.2 照明模式lighting  
4.5.3.3 控制光效果的材質指令material  
4.5.3.4 surfl指令的精細調用格式  
【例4.5.3.4-1】燈光、照明、材質指令所表現的圖形。  
clf;  
[X,Y,Z]=sphere(40);  
colormap(jet) %<3>  
subplot(1,2,1);surf(X,Y,Z);shading interp %<4>  
light (’position’,[2,-2,2],’style’,’local’) %<5>  
lighting  phong %<6>  
material([0.5,0.3,0.5,10,0.5]) %<7>  
subplot(1,2,2);surf(X,Y,Z,-Z);shading flat %<8>  
light;lighting flat %<9>  
light(’position’,[-1,-1,-2],’color’,’y’) %<10>  
light(’position’,[-1,0.5,1],’style’,’local’,’color’,’w’) %<11>  
material([0.4,0.5,0.3,10,0.3]) %<12>    

4.5.4 透明處理  
4.5.4.1 決定圖形透明性質的基本對象屬性  
4.5.4.2 圖形對象透明化機理  
4.5.4.3 透明化的高層指令及其應用  
【例4.5.4.3-1】本例演示:最簡便的透明化處理,即只要一條簡單的指令就能夠控制所畫曲面的透明度。此時,曲面各點的透明度都相同。在本例中,當aa接近於0時,曲面的透明度高;aa接近於1時,曲面幾乎不透明。   
  [X,Y,Z]=peaks(20);  
surf(X,Y,Z);  
shading flat  
aa=0.5;  
alpha(aa)    
   
【例4.5.4.3-2】本例演示:(A)控制透明度在一個軸維方向(如x軸方向)上線性變化的簡單方法;(B)因爲本例使用的是缺省透明度表(上斜線型),因此x值較小處透明度高,而值較大處幾乎不透明。(C)倘若在本例所列指令中,再加入透明度表設置指令,如alphamap(’vup’)等,則就可實現較複雜的透明度表現。  
[X,Y,Z]=peaks(20);  
surf(X,Y,Z);  
shading flat  
options=’x’;  
alpha(options)  
xlabel(’x \rightarrow’)    

【例4.5.4.3-3】本例目的:(A)理解貼片和邊的透明度:本例使曲面上不一樣貼片(和邊)取不一樣的透明度,每一個貼片(和邊)上各點的透明度相同。(B)指令搭配:只有當待透明化數據是"非標量"時,才能使用alpha(’flat’)alpha(’interp’)。本例時由alpha(Z)把待透明化數據設置爲矩陣的。(C)如何查詢AlimAlimMode屬性。  
[X,Y,Z]=peaks(20);  
surf(X,Y,Z);  
shading flat  
alpha(Z)  
alpha(’flat’)  
Alimit=alim  
alim_mode=alim(’mode’)    
Alimit =  
   -6.3605    7.5561  
alim_mode =  
auto  

【例4.5.4.3-4】藉助Alpha軸上下限設置改變曲面透明度。本例演示:指令alpha(options)是如何隨輸入宗量options的不一樣,而對不一樣的對象屬性進行設置。  
[X,Y,Z]=peaks(20);  
surf(X,Y,Z);  
shading  flat  
alpha(Z)  
Amin=-3;Amax=3;  
alim([Amin,Amax])  
alpha(’scaled’)  
alpha(’interp’)  

【例4.5.4.3-5】藉助MATLAB提供的透明度表,設置曲面的透明度。本例演示:(AV字型透明表:表有64個元素;第1和第64個元素透明度爲1,即不透明;第32個元素透明度爲0,即全透明。(B)待透明化數據是Z陣中大小不一樣的元素,所以縱座標爲0附近的曲面部分將幾乎全透明,而上下峯幾乎徹底不透明。  
clf,figure  
[X,Y,Z]=peaks(20);  
surf(X,Y,Z);  
shading interp  
alpha(Z)  
alpha(’interp’)  
alphamap(’vdown’)    
  
【例4.5.4.3-6】用透明度和色彩同時表現曲面的徑向導數:導數大處顏色深、欠透明;導數小處顏色淺、較透明。注意AlphaData設置與Cdata的搭配。  
figure(close)  
x=3*pi*(-1:1/30:1);y=x;[X,Y]=meshgrid(x,y);  
R=sqrt(X.^2+Y.^2)+eps;Z=sin(R)./R;  
[dzdx,dzdy]=gradient(Z);  
dzdr=sqrt(dzdx.^2+dzdy.^2);  
surf(X,Y,Z,abs(dzdr))  
shading interp  
colormap(spring)  
alphamap(’rampup’)  
alpha(’color’)  
alpha(’interp’)  
函數

4.6.1 圖象的類別和顯示  
4.6.2 圖象的讀寫  
4.6.2.1 圖象數據的保存和提取  
4.6.2.2 標準格式圖象文件的讀寫  
【例4.6.2.2-1】圖象文件的讀取和圖象的顯示  
1  
[X,cmap]=imread(’trees.tif’);  
class(X)  
image(X);colormap(cmap);axis image off   
ans =  
uint8    

2  
[X,cmap]=imread(’saturn.tif’);  
cmap  
imagesc(X);  
colormap(gray);  
axis image off    
cmap =  
     []    

3  
X=imread(’flowers.tif’);  
imwrite(X,’ff.jpg’,’Quality’,100)  
imfinfo(’ff.jpg’)  
image(imread(’ff.jpg’))  
axis image off    
ans =  
Filename: ’ff.jpg’  
FileModDate: ’03-Mar-2002 13:42:30’  
FileSize: 193220  
Format: ’jpg’  
FormatVersion: ’’  
Width: 500  
Height: 362  
BitDepth: 24  
ColorType: ’truecolor’  
FormatSignature: ’’  

4.6.3 8位和16位圖象  
 【例4.6.3.1-1】變址圖象兩種數據類型的轉換。本例演示:(A)由位深度(BitDepth)可知存放圖象數據的類型;(B)存放同一圖象的unit8類數據和double類數據間的等價轉換;(C)利用imwrite生成圖象格式文件時默認地採用unit8類型存放圖象數據。  
  
  1  
imageinf=imfinfo(’forest.tif’)    
imageinf =  
Filename: ’E:\MATLAB6P1\toolbox\images\imdemos\forest.tif’  
FileModDate: ’26-Oct-1996 06:11:14’  
FileSize: 124888  
Format: ’tif’  
…………  
BitDepth: 8  
…………  
Colormap: [256x3 double]  
…………  
2  
[X8,cmap]=imread(’forest.tif’);  
subplot(1,2,1);  
image(X);colormap(cmap);axis image off  
X64=double(X8)+1;subplot(1,2,2);  
image(X64);colormap(cmap);axis image off    
  
3  
whos    
  Name           Size           Bytes  Class  
  X8           301x447         134547  uint8 array  
  X64          301x447        1076376  double array  
  cmap         256x3             6144  double array  
  imageinf       1x1            11250  struct array  
Grand total is 271910 elements using 1239567 bytes    
4  
imwrite(X64,cmap,’myforest.jpg’)  
imfinfo(’myforest.jpg’)    
ans =   
Filename: ’myforest.jpg’  
FileModDate: ’03-Mar-2002 19:38:26’  
FileSize: 27716  
Format: ’jpg’  
FormatVersion: ’’  
Width: 447  
Height: 301  
BitDepth: 24  
ColorType: ’truecolor’  
FormatSignature: ’’  

4.6.4 捕獲圖形生成圖象文件  
【例4.6.4-1】本例目的:(1)加深對getframe獲取圖形構架數據的理解。(2)比較原圖和再生圖,能夠發現差別。(請讀者在指令窗中,運行如下指令)  
figure(2);surf(peaks)  
f=getframe(2);  
figure(1)  
image(f.cdata);colormap(f.colormap)  
【例4.6.4-2】本例目的:(A)任何圖形在getframe做用下均可成爲圖象。(B)比較原圖和再生圖,能夠發現差別。(請讀者在指令窗中,運行如下指令)  
figure(2),surf(peaks),[X,cmap]=getframe(2);  
imwrite(X,cmap,’fff.tif’);figure(1);image(imread(’fff.tif’)) 
工具

4.7.1 圖形窗菜單和工具條簡介  
【例4.7.1-1】運行如下指令產生如圖4.7-1所示的圖形窗。  
clf;shg,t=(pi*(0:1000)/1000)’;y1=sin(t);y12=sin(t).*sin(10*t);  
plot(t,y12,’b-’,t,[y1,-y1],’r:’),axis([0,pi,-1,1])    

4.8.1 一元函數簡捷繪圖指令  
【例4.8.1-1】繪製 和它的積分  間的圖形。  
syms t tao;  
y=2/3*exp(-t/2)*cos(sqrt(3)/2*t);  
s=subs(int(y,t,0,tao),tao,t);  
subplot(1,2,1),ezplot(y,[0,4*pi]);grid  
subplot(1,2,2),ezplot(s,[0,4*pi]);grid  
title(’s = \inty(t)dt’)  

4.8.2 二元函數簡捷繪圖指令  
【例4.8.2-1】在園域上畫 的圖形。(圖4.8-2  
ezsurf(’x*y’,’circ’);shading flat;view([-18,28])    

【例4.8.2-2】使用球座標參量畫部分球殼。(圖4.8-3  
x=’cos(s)*cos(t)’;y=’cos(s)*sin(t)’;z=’sin(s)’;  
ezsurf(x,y,z,[0,pi/2,0,3*pi/2])  
view(17,40);shading interp;colormap(spring)  
light(’position’,[0,0,-10],’style’,’local’)  
light(’position’,[-1,-0.5,2],’style’,’local’)  
material([0.5,0.5,0.5,10,0.3])
動畫



http://blog.sciencenet.cn/blog-112365-410575.html ui

相關文章
相關標籤/搜索