视觉是人们感受世界、认识自然的最重要依靠。数据可视化的目的在于:通过图形,从一堆杂乱的离散数据中观察数据间的内在关系,感受由图形所传递的内在本质。MATLAB一向注重数据的图形表示,并不断地采用新技术改进和完备其可视化功能。
本章将系统地阐述:离散数据表示成图形的基本机理;曲线、曲面绘制的基本技法和指令;特殊图形的生成和使用示例;如何使用线型、色彩、数据点标记凸现不同数据的特征;如何利用着色、灯光照明、反射效果、材质体现和透明度处理渲染、烘托表现高维函数的性状;如何生成和运用标识,画龙点睛般地注释图形;如何显示和转换unit8、unit16、double三种不同数据类型所体现的变址、灰度和真彩图象,如何读写各种标准图象格式文件;如何通过图形窗的交互操作对图形进行修饰、调整;如何打印和输出图形文件。
本章的图形指令只涉及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)’)
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 刻度、分格线和坐标框