视觉是人们感受世界、认识自然的最重要依靠。数据可视化的目的在于:通过图形,从一堆杂乱的离散数据中观察数据间的内在关系,感受由图形所传递的内在本质。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