Download presentation
Presentation is loading. Please wait.
Published byBernadetta Negri Modified 6年之前
1
第三章 MATLAB图形系统 3.1 图形绘制 3.2 图形标注 3.3 对数和极坐标系中图形绘制 3.4 复杂图形绘制 3.5 坐标轴控制
3.1 图形绘制 3.2 图形标注 3.3 对数和极坐标系中图形绘制 3.4 复杂图形绘制 3.5 坐标轴控制 3.6 颜色控制 3.7 高级绘图函数 3.8 图形函数 习题
2
3.1 图 形 绘 制 这里以产生一个简单的正弦函数曲线为例来说明图形的绘制,这一过程在MATLAB中是很简单的。设要产生0~2π之间的正弦函数,则可按下列步骤进行: (1) 产生x轴、y轴数据 >> x=0:pi/20:2*pi; >> y=sin(x); (2) 打开一个新的图形窗口 >> figure(1)
3
(3) 绘制出正弦曲线 >> plot(x,y, 'r-') 其中 'r−' 表示以红色实线绘制出正弦曲线。 (4) 给图形加上栅格线: >> grid on 这样就可以得到如图3.1所示的正弦曲线。从这一过程可以看出,在MATLAB中建立曲线图形是很方便的。
4
图3.1 正弦曲线
5
我们还可以将图形窗口进行分割,从而绘制出多条曲线。例如,将图形窗口分割成2×2的窗格,在每个窗格中分别绘制出正弦、余弦、正切、余切函数曲线,其MATLAB程序为
x=0:pi/50:2*pi; k=[ ]; x(k)=[]; %删除正切和余切的奇异点 figure(1)
6
subplot(2,2,1) plot(x,sin(x)), grid on %绘制正弦函数曲线 subplot(2,2,2) plot(x,cos(x)), grid on %绘制余弦函数曲线 subplot(2,2,3) plot(x,tan(x)), grid on %绘制正切函数曲线 subplot(2,2,4) plot(x,cot(x)), grid on %绘制余切函数曲线
7
执行后得到如图3.2所示的三角函数曲线。 图3.2 常用三角函数的曲线
8
3.2 图 形 标 注 绘制图形后,还要给图形进行标注。例如,可以给每个图加上标题、坐标轴标记和曲线说明等。给图3.1加上标题和轴标记,可输入 title('sin(\alpha)') xlabel('\alpha') ylabel('sin(\alpha)') 则可以得到如图3.3所示的结果。这里\alpha表示α,取自于Tex字符集,详见附录A的text函数中的字符集。
9
图3.3 含标题的正弦曲线
10
利用legend函数可对图中的曲线进行说明。例如,在同一张图上可得到y=x2和y=x3曲线,然后利用legend函数对曲线进行标注。MATLAB程序为
figure(1) plot(x,y1, 'r-', x, y2, 'k.'), grid on legend('\ity=x^2', '\ity=x^3') title('y=x^2和y=x^3曲线') xlabel('x'), ylabel('y')
11
执行后得到如图3.4所示的曲线。从这一示例可以看出,MATLAB标注函数中可以采用中文字符,这极大地方便了用户。特别值得一提的是,在字符串中,“^”表示上标,“_”表示下标。
12
图3.4 插图说明使用示例
13
利用text函数也可以对曲线进行标注。例如,在同一张图上绘制出正弦和余弦曲线,则MATLAB程序为
x=0:pi/50:2*pi; y1=sin(x); y2=cos(x); figure(1) plot(x, y1, 'k-', x, y2, 'k-'), grid on text(pi, 0.05, '\leftarrow sin(\alpha)') text(pi/4-0.05, 0.05, 'cos(\alpha)\rightarrow') title('sin(\alpha) and cos(\alpha)') xlabel('\alpha'), ylabel('sin(\alpha) and cos(\alpha)')
14
图3.5 文本标注使用示例
15
3.3 对数和极坐标系中图形绘制 有时变量变化范围很大,如x轴从0.01到100,这时如果仍采用plot绘图,就会失去局部可视性,因此应采用对数坐标系进行绘图。例如,求0.01~100之间的常用对数(以10为底的对数),MATLAB程序为 x=0.01:.01:100; y=log10(x);% figure(1) subplot(2,1,1) plot(x,y,'k-'), grid on title('\ity=log_{10}(x) in Cartesian coordinates'), ylabel('y')
16
subplot(2,1,2), grid on semilogx(x,y,'k-') %半对数绘图 title('\ity=log_{10}(x) in Semi-log coordinates') xlabel('x'), ylabel('y')
17
图3.6 笛卡尔和对数坐标系中曲线的对比
18
对于任一矩阵,通过eig函数可求出其特征值,从而了解矩阵的特性,为此希望能够直观地显示出特征值。由于特征值一般为复数,因此可利用polar函数在极坐标系中进行表示。例如,输入:
19
a=randn(2,2); b=eig(a) c1=abs(b), c2=angle(b) figure(1) subplot(2,1,1) plot(b,'rx'), grid on title('Plot using Cartesian coordinates') subplot(2,1,2) polar (c2,c1,'rx') gtext (‘Plot using polar coordinates’) %点击鼠标绘制文本
20
图3.7 笛卡尔和极坐标系中特征值的表示
21
在控制系统中,可以求出系统的零极点,然后利用polar函数在极坐标系中绘制出零极点图,直观地显示出系统的零极点,这有助于我们对控制系统进行深入了解。如输入MATLAB程序:
num=[1 1.1]; den=[ ];%拉氏变换分子分母多项式 [z,p,k]=tf2zp(num,den);%转为零极点z和p,以及增益 c1=abs(z);c2=angle(z); c3=abs(p);c4=angle(p); figure(1) polar(c4,c3,‘bx’) %极点 hold on,polar(c2,c1,‘ro’) %零点 gtext('极坐标系中零极点的表示')
22
图3.8 极坐标系中系统零极点的表示
23
3.4 复杂图形绘制 在同一个图形窗口中绘制多条曲线是MATLAB的一大功能,这可以有多种应用方法。第一种方法是将曲线数据保存在n×m的矩阵y中,而x为相应的x轴向量n×1或1×n,则plot(x,y)命令可以在同一个图形窗口中绘制出m条曲线。这种方法非常适用于由其它软件产生的数据,然后由load命令读入到MATLAB中,并绘制出曲线。例如,MATLAB提供了一个多峰函数peaks.m,其函数表达式为
24
利用这一函数,可以方便地产生多条曲线的数据
[x,y]=meshgrid(-3:0.15:3); %产生41×41的输入矩阵 z=peaks(x,y); %计算相应的峰值函数 %然后利用plot函数可直接绘制出这41条曲线 x1=x(1,:); plot(x1, z), grid on 这时可得到如图3.9所示的多条曲线。
25
图3.9 多峰函数的多条曲线
26
另外由于此处给出的z=f(x,y)是两个变量的函数,所以
函数图形可以在3维空间绘制。需要用到3维绘图命令plot3, surf, contour。例如: figure; plot3(x,y,z); grid on; %三维曲线 figure; surf(x,y,z); %三维曲面 figure; contour(x,y,z); %等高线
27
plot3绘制的三维曲线
28
surf绘制的三维曲面
29
contour绘制的二维等高线
30
绘制多条曲线的第二种方法是在同一个plot函数中分别指定每条曲线的坐标轴数据,即采用plot(x1, y1, x2, y2,…)。例如,对于下列两个函数(这是神经网络中的两个重要函数:logsig和tansig):
31
可分别求出−5~5之间的值,在同一张图上画出曲线,并利用legend函数对曲线进行说明,MATLAB程序为
x=[-5:.1:5]; y1=1./(1+exp(-x)); y2=(1-exp(-x)).*y1; figure(1) plot(x,y1,'r-',x,y2,'b.'),grid on legend('logsig函数', 'tansig函数', 4) title('多条曲线')
32
图3.10 logsig和tansig函数曲线
33
绘制多条曲线的第三种方法是利用hold on命令。先在图形窗口中绘制出第一条曲线,然后执行hold on(保持原有图像元素)命令,最后绘制出第二条、第三条等曲线。例如,对于图3.10中的曲线,也可以采用下列的MATLAB程序获得: figure(1) plot(x,y1,'r-') hold on plot(x,y2,'b--') grid on
34
利用这种方法在绘制曲线后,可同时在数据点上以特殊记号进行标注。例如,在绘制出简单的正弦函数后,可以用圆圈表示各个数据点,程序如下:
x=0:pi/20:2*pi; y=sin(x); figure(1) plot(x,y,'r-') hold on plot(x,y,'bo'), grid on title('sin(\alpha)') xlabel('\alpha'),ylabel('sin(\alpha)')
35
图3.11 正弦曲线
36
利用plotyy函数可绘制出双y轴的图形,这样在同一张图上表示两条曲线时,可拥有各自的y轴。例如,在同一张纸上绘制出双y轴的y1=sin(t)和y2=2cos(t)函数,MATLAB程序为
t = -pi:pi/20:pi; y1 = sin(t); y2 = 2*cos(t); plotyy(t,y1,t,y2), grid on title(' sin(t) and cos(t) ') text(0,0,'\leftarrow sin(t)') text(pi/2,0,'\leftarrow 2cos(t)')
37
执行后可得到如图3.12所示的结果。图中左边轴为第一条曲线的垂直轴,右边轴为第二条曲线的垂直轴,从图中可以看出,虽然y1和y2具有不同的值域,但由于采用了双y轴,因此两条曲线在显示上具有相同的幅值(因为两个y轴的绘图单位不同)。
38
图3.12 双y轴正余弦曲线
39
3.5 坐 标 轴 控 制 利用box函数可以控制图形的上边框和右边框,box on、box off可分别显示和隐去上边框和右边框,box命令为乒乓开关,可以在这两种状态之间切换。为了更加灵活地控制各个边框(坐标轴),可以采用axes命令。例如在[0,pi/2]之间绘制出y=tan(x)曲线,然后利用box off命令去掉边框,MATLAB程序为 x=0:.025:pi/2; y=tan(x); figure(1) plot(x,y,'r-o'), grid on box off title('正切函数'), xlabel('角度(弧度)')
40
图3.13 正切函数曲线
41
axis(与上面提到的axes不同)命令用于控制坐标轴的刻度。一般在绘制曲线时,系统会根据所采用的数据自动生成适当的坐标轴刻度,但有时需要进行修改,比如在两个曲线对比时,应采用相同的比例因子,以便直观地比较大小。设已由其它系统测量出两种方法的误差,保存于err.dat中,其中第一列为采样时刻,第二、三列分别为两种方法的测量值。现直接绘制出误差曲线,同时绘制出利用axis修改成相同比例后的误差曲线。MATLAB程序为
42
load err.dat t=err(:,1); e1=err(:,2); e2=err(:,3); figure(1) subplot(2,2,1), plot(t,e1,'k'),title('误差1') subplot(2,2,3), plot(t,e2,'k'),title('误差2') subplot(2,2,2), plot(t,e1,'k'),title('坐标轴调整后的误差1') axis([ ])%控制x-y轴的显示范围 subplot(2,2,4), plot(t,e2,'k'),title('坐标轴调整后的误差2') axis([ ])
43
图3.14 测量误差的比较
44
为了更清楚地观察曲线的局部特性,也可以修改坐标轴刻度,例如,对于一个复杂函数
y=cos(tan(πx))
45
利用plot函数绘制出曲线时,在x=0.5附近区域几乎看不清楚。现在利用axis函数调整x轴的刻度,则可以比较清楚地看到这一局部区域。MATLAB程序为
x=0:1/3000:1; y=cos(tan(pi*x)); figure(1) subplot(2,1,1), plot(x,y) title('\itcos(tan(\pix))') subplot(2,1,2), plot(x,y) axis([ ]); title('复杂函数的局部透视')
46
图3.15 复杂函数曲线的局部透视
47
axis equal可使绘制图形的x、y轴等长,这样可以使绘制的圆成为真正的圆。例如:
t = 0:pi/20:2*pi; figure(1) subplot(2,2,1),plot(sin(t),cos(t)) title('圆形轨迹') subplot(2,2,2),plot(sin(t),2*cos(t)) title('椭圆形轨迹') subplot(2,2,3),plot(sin(t),cos(t)),axis square title('调整后的圆形轨迹') subplot(2,2,4),plot(sin(t),2*cos(t)),axis square title('调整后的椭圆形轨迹') 执行后得到如图3.16所示的轨迹。
48
图3.16 调整前、后的圆轨迹
49
利用axis off命令可以关闭坐标轴的显示,产生不含有坐标轴的图形。例如:
t = 0:pi/20:2*pi; [x,y] = meshgrid(t); z = sin(x).*cos(y); figure(1) plot(t,z), axis([0 2*pi -1 1]) box off, axis off title('无坐标轴和边框图形') 执行后得到如图3.17所示的曲线。
50
图3.17 无坐标轴与边框的曲线
51
3.6 颜 色 控 制 在绘制曲线时可直接指定曲线的颜色,在标注文本如title,xlabel,ylabel,zlabel,text命令中,可利用文本特性Color来指定文本的颜色。例如,下列的MATLAB程序可产生红色的曲线、绿色的标题、蓝色的x与y轴标注和黑色的曲线标注。
52
x=[-pi:pi/20:pi]; y=exp(-2*sin(x)); figure(1) plot(x,y,'r-'), grid on title('绿色的标题(y=e^{-2sin(x)})','Color','g') xlabel('蓝色的x轴标注','Color','b') ylabel('蓝色的y轴标注','Color','b') text(−0.6,3.8,'\leftarrow黑色的曲线标注','Color','k')
53
图3.18 颜色控制
54
利用colormap函数可以改变每种颜色的色调,MATLAB提供了许多种不同用途的颜色板。为了进一步了解各种颜色板的颜色,可输入
cmap=colormap; L=length(cmap); x=[1:L]; y=x'*ones(size(x)); figure(1) bar(x(1:2),y(1:2,:)) title('gray颜色板的颜色') colormap('gray')
55
bar命令执行后
56
图3.19 gray(灰度)颜色板的颜色
57
MATLAB专门提供了人体脊骨的图像数据(spine),利用bone颜色板可更清晰地显示这一类图像。MATLAB程序为
load spine image(X) colormap bone title('人体脊骨图') 执行后得到如图3.20所示的人体脊骨图。
58
图3.20 人体脊骨图
59
3.7 高级绘图函数 除了前面介绍的以二维平面为图形窗口的绘图功能外,MATLAB还提供了一些功能很强的高级绘图函数,如表3.1所示,这里分类给出一些函数的使用说明。
60
表3.1 高级绘图函数
62
区域、条形及其饼图 1. bar,barh 功能:绘制出条形图。 格式: bar(Y) bar(x, Y) bar(…, width) bar(…, 'style') bar(…, 'bar_color')
63
说明: bar和barh函数可在二维平面上绘制出条形图,它以条形块来表示数值的大小。bar函数绘制出的条形图呈竖直方向,barh函数绘制出的条形图呈水平方向,其应用格式完全一致,因此,这里仅给出bar函数的说明。 bar(Y)可以绘制出Y的条形图,当Y为矩阵时,则bar函数将由每行元素产生的条形聚合成组。当Y为向量时,x轴的范围为[1,length(Y)];当Y为矩阵时,x轴的范围为 [1,size(Y, 1)]。 bar(x, Y)可以指定x轴坐标,向量x中的值可以是非单调的,但不能包含重复的值。当Y为矩阵时,则在x位置上对Y每行元素产生的条形进行聚合。
64
bar(…,width)可以设定各个条形的宽度,并且可以控制组内条形的分割,缺省的宽度为0.8。
bar(…,'style') 可以指定条形的风格:'grouped'、'stacked',缺省值为'grouped'。当'style'取'grouped',表示分组绘制条形图,即Y中每一行为一组,分别按不同颜色绘出条形图;取'stacked',表示将每组中的值分段以不同颜色绘制出条形图,即每一行中的值一个接一个绘制在同一个条形块中。 bar(…, 'bar_color')可以指定条形块的颜色。 例如输入 x = -2.9:0.2:2.9; bar(x,exp(-x.*x),'r') title('条形图\ity=e^{-x^2}')
65
图3.21 简单的条形图
66
例如,利用随机函数rand产生一个矩阵,这样可以得到更复杂的条形图。MATLAB程序为
Y = round(rand(5,3)*10); figure(1) subplot(2,2,1),bar(Y,'group'),title 'Group' subplot(2,2,2),bar(Y,'stack'),title 'Stack' subplot(2,2,3),barh(Y,'stack'),title 'Stack' subplot(2,2,4),bar(Y,1.5),title 'Width = 1.5'
67
图3.22 复杂的条形图
68
2.bar3, bar3h 功能:绘制出三维条形图。 格式: bar3(Y) bar3(x, Y) bar3(…, width) bar3(…, 'style') bar3(…, 'bar_color') 说明: bar3和bar3h函数可在三维空间上绘制出条形图,它以条形块来表示数值的大小。其它说明类似于bar、barh函数。
69
例如,执行下面程序可以得到如图3.23所示的三维条形图。
Y = cool(7); subplot(2,2,1) bar3(Y,'detached') title('Detached') subplot(2,2,2) bar3(Y,0.25,'detached') title('Width = 0.25') subplot(2,2,3) bar3(Y,'grouped') title('Grouped') subplot(2,2,4) bar3(Y,'stacked') title('Stacked') colormap([1 0 0;0 1 0;0 0 1])
70
图3.23 三维条形图
71
3. pie 功能:绘制出饼图。 格式: pie(X) pie(X, explode) pie(…, labels) 说明: pie(X)可以将X中的数据绘制出饼图;Pie(x, explode) 可利用explode指定分离出的切片;pie(…, labels)可以为每个切片添加文本标注,这时标注个数必须与X中的元素个数一致。
72
图3.24 饼图
73
例如输入 x = [ ]; explode = [ ]; figure(1) colormap hsv pie(x,explode) title('饼图')
74
4.pie3 功能:绘制出三维饼图。 格式: pie3(X) pie3(X, explode) pie3(…, labels) 说明: pie3函数可绘制出三维的饼图,其说明类似于pie函数。例如输入 >> x = [ ]; >> explode = [ ]; >> pie3(x,explode)
75
图3.25 三维饼图
76
5.area 功能:二维图形的填充区域。 格式: area(Y) area(X, Y) area(…, basevalue) area(…, 'PropertyName', PropertyValue, …) area(axes_handle, …) h = area(…) area('v6', …)
77
说明: 图形区域为Y元素之下的部分,当Y为矩阵时,图形的高度由Y每一行的和值构成。area(Y)可以绘出以向量Y和矩阵Y每一列和值的区域图形,x轴会自动调整为1:size(Y, 1)。当X、Y为向量时,area(X, Y)等同于plot(X, Y),只是对区域[0, Y]进行填充;当Y为矩阵时,area(X, Y)以填充方式绘出Y的所有列。 在area(…, basevalue)命令中,可以指定填充区域的基值basevalue,缺省的基值为0;area(…, 'PropertyName',PropertyValue, …)可以指定图形特性的值。
78
例如,输入 >> Y = [1, 5, 3; 3, 2, 7; 1, 5, 3; 2, 6, 1]; >> area(Y),grid on >> colormap gray %灰度填充 >> title 'Stacked Area Plot'
79
图 图形区域
80
等高线绘图 1.contour 功能:绘制矩阵的等高线。 格式: contour(Z) contour(X, Y, Z) contour(Z, n) contour(X, Y, Z, n) contour(Z, v) contour(X, Y, Z, v) contour(…, LineSpec)
81
说明: contour函数可以绘制出矩阵的等值线,利用clabel函数可以对等值线进行标注。 contour(Z) 可以绘制出矩阵Z的等值线,其值间隔自动选取;contour(Z, n)可以采用固定的间隔n(n为变量);contour(Z, v)可以在向量v中指定间隔,间隔数必须等于length(v)。在contour(X, Y, Z)、contour(X, Y, Z, n)和contour(X, Y, Z, v)中,X、Y指定x轴和y轴的上、下限,Z为高度值。contour(…, LineSpec)可以利用LineSpec指定等高线的形状和颜色。
82
例如,执行下面程序可以得到如图3.27所示的等高线图形。
[X,Y] = meshgrid(-2:.2:2, -2:.2:3); Z = X.*exp(-X.^2-Y.^2); [C,h] = contour(X,Y,Z); set(h,'ShowText','on','TextStep',get(h,'LevelStep')*2); title('The contour') colormap hsv;%colormap gray
83
图3.27 等高线图形
84
2.contour3 功能:绘制出矩阵的三维等高线。 格式: contour3(Z) contour3(X, Y, Z) contour3(Z, n) contour3(X, Y, Z, n) contour3(Z, v) contour3(X, Y, Z, v) contour3(…, LineSpec)
85
说明: contour3可以绘出三维的等高线,其说明类似于contour函数。例如,执行下面程序可以得到如图3.28所示的等高线图形。 [X,Y] = meshgrid([-2:.25:2]); Z = X.*exp(-X.^2-Y.^2); contour3(X,Y,Z,30) surface(X,Y,Z,'EdgeColor',[ ],'FaceColor','none') title('The three-dimensional contour '),grid off view(-15, 25)
86
图3.28 等高线图形
87
3.contourf 功能:绘制并填充二维等高线图。 格式: contourf(Z) contourf(X, Y, Z) contourf(Z, n) contourf(X, Y, Z, n) contourf(Z, v) contourf(X, Y, Z, v)
88
说明: contourf函数可以绘制出矩阵的等值线,并在等高线之间用不同的颜色填充,colormap函数会影响显示的颜色。实际上,contourf与contour函数类似,只是填充了颜色,因此其它说明参见contour函数。 例如,contourf(peaks(20),10)可以产生峰值函数peaks的等高线,如图3.29所示。
89
图3.29 峰值函数的等高线
90
方向与速度绘图 1.comet 功能:绘制二维彗星图形。 格式: comet(y) comet(x,y) comet(x,y,p)
91
说明: 彗星图形是一幅生动的图形,其头部用圆圈表示,尾部用直线表示,用来表示数据的轨迹。(动画展示) 函数comet(y)可以显示出向量y的彗星图;comet(x, y)可以显示出向量x与y的彗星图;comet(x, y, p)可以指定彗星的长度p*length(y),其中p的缺省值为0.1。 例如,执行下面程序可以得到如图3.30所示的彗星图形,同时也给出了向量x和y的时间曲线,如图3.31所示。
92
t = 0:.01:2*pi; x = cos(2*t).*(cos(t).^2); y = sin(2*t).*(sin(t).^2); figure(1) comet(x,y); figure(2) plot(t,x,'k-',t,y,'k--'),title('The curves of x and y')
93
图3.30 彗星图形(动画)
94
图3.31 数据x和y曲线
95
2.comet3 功能:绘制三维彗星图形。 格式: comet3(z) comet3(x, y, z) comet3(x, y, z, p)
96
说明: 函数comet3可以显示出向量y的三维彗星图,其它说明类似于comet函数。例如,执行下面程序,可以清楚看到三维的彗星图。 t = -10*pi:pi/250:10*pi; figure comet3((cos(2*t).^2).*sin(t), (sin(2*t).^2).*cos(t),t);
98
3.compass 功能:绘制出罗盘图(从原点发出的箭头图)。 格式: compass(U, V) compass(Z) compass(…, LineSpec)
99
说明: 罗盘图为从原点发出的箭头图。compass(U,V)可以绘制出n(n=length(U)或n=length(V))个箭头,每个箭头的起点在原点,终点由(U(i),V(i))确定;在compass(Z)中,Z为复数,箭头的终点由(real(Z),imag(Z))确定;compass(…, LineSpec)可以指定绘图的线型、符号和颜色。例如,输入 >>Z = eig(randn(20,20)); >>compass(Z) 执行后可以得到如图3.32所示的罗盘图。
100
图3.32 罗盘图
101
4.feather * 功能:绘制速度向量图。 格式: feather(U,V) feather(Z) feather(…, LineSpec)
102
说明: 速度向量图为从水平轴等间隔处出发的向量。feather(U, V)可以显示出速度向量图,其中U指定向量终点的x轴坐标,V指定向量终点的y轴坐标;在feather(Z)中,Z为复数,向量的终点由(real(Z), imag(Z))确定;feather(…, LineSpec)可以指定绘图的线型、符号和颜色。例如,输入 >>theta = (-90:10:90)*pi/180; >>r = 2*ones(size(theta)); >> [u,v] = pol2cart(theta,r); >>feather(u,v);
103
图3.33 速度向量图
104
5.quiver * 功能:绘制颤抖或速度图。 格式: quiver(x, y, u, v) quiver(u, v) quiver(…, scale) quiver(…, LineSpec) quiver(…, LineSpec,'filled')
105
说明: quiver(x, y, u, v)可以在(x, y)处显示出以(u, v)为内容的箭头,用以表示速度向量。矩阵x、y、u、v必须具有相同的尺寸。其它格式的说明参见在线帮助。例如下面程序可以计算出函数的梯度场,并以颤抖图表示,执行后得到如图3.34所示的结果。 [X,Y] = meshgrid(-2:.2:2); Z = X.*exp(-X.^2 - Y.^2); [DX,DY] = gradient(Z,.2,.2); contour(X,Y,Z) hold on quiver(X,Y,DX,DY)
106
图3.34 函数的梯度场
107
6.quiver3 功能:绘制三维的颤抖或速度图。 格式: quiver3(x, y, z, u, v, w) quiver3(z, u, v, w) quiver3(…, scale) quiver3(…, LineSpec) quiver3(…, LineSpec,'filled')
108
说明: quiver3 函数与quiver函数类似,只是在三维空间中绘制出速度图。例如下面的程序可以计算出函数的梯度场,并以三维空间中的速度图表示,执行后得到如图3.35所示的结果。 [X,Y] = meshgrid(-2:0.25:2, -1:0.2:1); Z = X.* exp-X.^2 - Y.^2); [U,V,W] = surfnorm(X,Y,Z); quiver3(X,Y,Z,U,V,W,0.5,'k'); hold on, surf(X,Y,Z); view(-35,45),axis ([ ])
109
图3.35 三维空间中函数梯度场的表示
110
离散数据绘图 1.stem 功能:绘制出离散序列数据。 格式: stem(Y) stem(X, Y) stem(…, 'fill') stem(…, LineSpec)
111
说明: stem(Y)可以按离散竖条形式显示出数据Y,x轴取其序号;当Y为矩阵时,stem绘制出Y每一行的元素。stem(X,Y)可以指定x轴的坐标X,其中X、Y为相同尺寸的向量或矩阵,当Y为矩阵时,X可以为向量(其长度为size(Y, 1),即Y的行数)。stem(…, ‘fill’)可以指定竖条末端圆圈的颜色;stem(…, LineSpec) 可以为绘图指定线型、符号和颜色。例如输入 t = linspace(-2*pi,2*pi,10); h = stem(t,cos(t),'fill', --'); set(get(h,'BaseLine'),'LineStyle',':') set(h,'MarkerFaceColor','red') title('The stems')
112
图3.36 离散数据显示
113
2.stem3 功能:在三维空间中绘制出离散序列数据。 格式: stem3(Z) stem3(X, Y, Z) stem3(…, 'fill') stem3(…, LineSpec)
114
说明: stem3函数与stem函数类似,只是stem3函数将离散竖条绘制在三维空间中。在stem3(Z)中,Z为二维矩阵,其下标构成(x,y)。其它说明参见stem函数。例如输入 X = linspace(0,1,10); Y = X./2; Z = sin(X) + cos(Y); stem3(X,Y,Z,'fill') title('The three-dimensional stem') view(-25,30),box off
115
图3.37 三维空间中离散数据的显示
116
3.stairs 功能:绘制梯形图。 格式: stairs(Y) stairs(X,Y) stairs(…, LineSpec) 说明: stairs函数与stem函数类似,只是stem函数绘制竖条图,而stairs函数用于绘制梯形图。参见stem函数。例如输入 x = linspace(-2*pi,2*pi,40); stairs(x,sin(x)) %一阶保持
117
图3.38 梯形图
118
柱状图 1. hist 功能:绘制出柱状图。(统计随机数据的分布规律) 格式: n = hist(Y) n = hist(Y, x) n = hist(Y, nbins) [n,xout] = hist(…)
119
说明: hist函数可在二维平面上绘制出柱状图,用来表示数据值的分布情况。 n = hist(Y)可以按均匀间隔的10类统计向量Y中的元素个数,当Y为m×p矩阵时,hist将按Y的列进行统计,从而得到10×p的结果矩阵。在n = hist(Y, nbins)中,nbins为标量,则hist函数可以将Y按nbins类统计。 n = hist(Y, x)
120
[n, xout] = hist(…)还可以得到各类区域中心的位置xout,从而可以利用bar(xout, n)绘制出柱状图。
y = randn(2000,1); figure(1),hist(y,x) title('柱状图表示数据分布') axis([-3 3 -Inf Inf])
121
图3.39 randn数据分布的柱状图
122
2.histc 功能:绘制出柱状图。 格式: n = histc(x, edges) n = histc(x, edges, dim) 说明: 函数histc与hist类似,只是利用edges指定区域的边缘,dim用于指定沿着指定维进行统计操作。
123
3.rose 功能:绘制角度的柱状图。 格式: rose(theta) rose(theta, x) rose(theta, nbins) h = rose(
124
说明: 函数rose可以在极坐标系中绘制出角度的柱状图,用以表示角度的分布情况。 rose(theta)可以按20个均匀角度区域统计,并绘制出极坐标系中的柱状图,向量theta为以弧度表示的角度值。在rose(theta, nbins)中,nbins为标量,用于指定区域数。 rose(theta, x)可以利用向量x指定角度区域,length(x)表示区域数,x的值指定区域中心。 h = rose(…)命令在绘制出柱状图的同时,还给出了图形对象的句柄。 例如,输入 >> theta = 2*pi*rand(1,50); >>rose(theta)
125
图3.40 角度柱状图
126
多边形和曲面 1.cylinder 功能:绘制柱面图。 格式: [X, Y, Z] = cylinder [X, Y, Z] = cylinder(r) [X, Y, Z] = cylinder(r, n) cylinder(…)
127
说明: cylinder函数可在三维空间上画出柱面图。[X, Y, Z] = cylinder可以计算出半径为1的圆柱体的坐标(x,y,z),在圆周上均匀选取20个点;[X, Y, Z] = cylinder(r)可以指定轮廓曲线;[X, Y, Z] = cylinder(r, n)可以在圆周上均匀选取n个点。 当不带输出变量引用函数cylinder(…)时,可以直接绘制出柱面图。例如,执行下面程序可以得到如图3.41所示的简单柱面图。 cylinder, axis square h = findobj('Type','surface'); set(h,'CData',rand(size(get(h,'CData')))) title('简单柱面图')
128
图3.41 简单柱面图
129
利用cylinder(r) 还可以产生具有一定外形的柱体。例如输入
t = 0:pi/10:2*pi; figure(1) [X,Y,Z] = cylinder(2+cos(t));%指定柱面的外形曲线 surf(X,Y,Z),axis square title('复杂柱面图') 执行后得到如图3.42所示的复杂柱面图。
130
图3.42 复杂柱面图
131
2.sphere 功能:绘制球形图。 格式: sphere sphere(n) [X, Y, Z] = sphere(…)
132
说明: [X, Y, Z] =sphere函数可以计算出半径为1的球形的坐标(x, y, z),并在三维空间上画出这个球,球由20×20块面组成;sphere函数只绘制出单位半径的球;sphere(n)可以指定球由n×n块面组成。例如输入 >>sphere >>axis equal,title('球') 执行后得到如图3.43所示的球。
133
图3.43 三维空间上的球
134
3.ellipsoid 功能:绘制椭圆体。 格式: [x,y,z] = ellipsoid(xc,yc,zc,xr,yr,zr,n) [x,y,z] = ellipsoid(xc,yc,zc,xr,yr,zr) ellipsoid(axes_handle, …) ellipsoid(…)
135
说明: [x,y,z] = ellipsoid(xc,yc,zc,xr,yr,zr,n)可以产生3个(n+1)×(n+1)的矩阵,这样利用surf(x,y,z)就可以产生以(xc,yc,zc)为中心、以(xr,yr,zr)为半径的椭圆;在[x,y,z] = ellipsoid(xc,yc,zc,xr,yr,zr)中,默认n = 20;当没有输出变量引用函数ellipsoid(…)时,可以直接绘制出椭圆的曲面。
136
[x, y, z] = ellipsoid(0,0,0,5.9,3.25,3.25,30); surfl(x, y, z) colormap copper axis equal
137
4.polyarea 功能:绘制出多边形。 格式: A = polyarea(X, Y) A = polyarea(X, Y, dim)
138
说明: A = polyarea(X, Y)可以绘制出由向量X、Y指定顶点的多边形区域;如果X、Y为矩阵,则其尺寸必须一致,多边形区域由X、Y相应的列构成;如果X、Y为多维阵列,则polyarea对第一个非单点维进行操作。A = polyarea(X,Y,dim)可以沿着指定维dim进行操作。例如输入 L = linspace(0,2.*pi,6); xv = cos(L)';yv = sin(L)'; xv = [xv ; xv(1)]; yv = [yv ; yv(1)]; A = polyarea(xv,yv); plot(xv,yv); title(['Area = ' num2str(A)]); axis image 执行后可以得到如图3.44所示的多边形图形。
139
图3.44 多边形图形
140
5.inpolygon 功能:删除多边形区域内部的点。 格式: IN = inpolygon(X,Y,xv,yv) [IN ON] = inpolygon(X,Y,xv,yv)
141
说明: IN = inpolygon(X,Y,xv,yv)可以得到一个与X、Y尺寸一致的矩阵IN,当点(X(p,q),Y(p,q))在区域内部时,IN(p,q)=1,否则为0。xv、yv用于指定多边形区域。[IN ON]=inpolygon(X,Y,xv,yv)还得到了一个与X、Y尺寸一致的矩阵ON,如果点(X(p,q),Y(p,q))在区域边界上,则ON(p,q)=1,否则为0。例如,下面的程序执行后可以得到如图3.45所示的判定结果。 L = linspace(0,2.*pi,6); xv = cos(L)';yv = sin(L)'; xv = [xv ; xv(1)]; yv = [yv ; yv(1)]; x = randn(250,1); y = randn(250,1); in = inpolygon(x,y,xv,yv); plot(xv,yv,x(in),y(in),'r+',x(~in),y(~in),'bo')
142
图3.45 区域判定结果
143
6.fill 功能:填充二维多边形。 格式: fill(X,Y,C) fill(X,Y,ColorSpec) fill(X1,Y1,C1,X2,Y2,C2,…) 说明: fill函数可以绘制着了颜色的多边形。在fill(X,Y,C)中,X、Y用于指定多边形(参见polyarea函数),C用于指定颜色。当C为行向量时,length(C)=size(X,2)或者length(C)=size(Y,2);当C为列向量时,length(C)=size(X,1)或者length(C)=size(Y,1);在填充颜色时,如果需要,fill函数会连接多边形的起点和终点,以便形成一个封闭的多边形。
144
fill(X,Y,ColorSpec)可以指定填充的颜色;fill(X1,Y1,C1,X2,
例如,为绘制出红色的六边形,程序如下: t = (1/16:1/8:1)'*2*pi; x = sin(t); y = cos(t); fill(x,y,'r'),title('六边形'),axis square 执行后可以得到如图3.46所示的六边形。
145
图3.46 六边形
146
7.fill3 功能:填充三维多边形。 格式: fill3(X,Y,Z,C) fill3(X,Y,Z,ColorSpec) fill3(X1,Y1,Z1,C1,X2,Y2,Z2,C2,…)
147
说明: 与fill类似,函数fill3可以绘制出着了颜色的三维多边形区域,其说明可参见fill函数,不同的是fill3用X、Y、Z指定三维的多边形区域。例如执行下面程序,可以得到如图3.47所示的三维多边形区域图形。 X = [ ; ; ]; Y = [ ; ; ]; Z = [ ; ; ]; C = [ ; ; ]; fill3(X,Y,Z,C),title('着色的三维多边形区域')
148
图3.47 着色的三维多边形区域
149
8.ribbon 功能:绘制出带状图。 格式: ribbon(Y) ribbon(X,Y) ribbon(X,Y,width) ribbon(axes_handle, …) h = ribbon(…)
150
说明: ribbon(Y)可以根据Y的列绘制出三维带状图,其中X = 1:size(Y,1);ribbon(X,Y)可以指定X值,X、Y必须具有相同尺寸的向量或矩阵;ribbon(X,Y,width)可以指定带状宽度,缺省值为0.75。例如,为绘制出峰值函数peaks的带状图,可以输入 >> [x,y] = meshgrid(-3:.5:3, -3:.1:3); >>z = peaks(x,y); >>ribbon(y,z),colormap hsv 执行后可以得到如图3.48所示的带状图。
151
图3.48 峰值函数的带状图
152
9.slice 功能:绘制立体切片图。 格式: slice(V,sx,sy,sz) slice(X,Y,Z,V,sx,sy,sz) slice(V,XI,YI,ZI) slice(X,Y,Z,V,XI,YI,ZI) slice(…, 'method')
153
说明: 函数slice可以为测定体积的数据绘制直交的切片图。slice(V,sx,sy,sz)可以绘制出体积V的切片图,sx、sy和sz用于指定相应坐标的方向,V为m×n×p的阵列。在slice(X,Y,Z,V,sx,sy,sz)中,X、Y、Z为单调的正交间距向量,用于指定绘图的x、y、z轴坐标,每一点的颜色由V值的三维内插算法确定。
154
例如,为观察函数在-2≤x≤2、-2≤y≤2、-2≤z≤2上的体积情况,可以输入
>> [x,y,z] = meshgrid(-2:.2:2, -2:.25:2, -2:.16:2); >>v = x.*exp(-x.^2-y.^2-z.^2); >>xslice = [-1.2,.8,2]; yslice = 2; zslice = [-2,0]; >>slice(x,y,z,v,xslice,yslice,zslice)
155
图3.49 函数的切片图
156
10.waterfall 功能:绘制瀑布图。 格式: waterfall(Z) waterfall(X,Y,Z) waterfall(…, C)
157
说明: 函数waterfall可以绘制出一个与meshz函数类似的网孔图,只是这里不绘出矩阵的列线,从而看起来具有瀑布的效果。 waterfall(Z)可以根据Z绘制出三维瀑布图,其中x = 1:size(Z,1),y = 1:size(Z,1),Z为曲面的高度,同时Z还确定了颜色;在waterfall(X,Y,Z)中,利用向量X、Y指定x轴和y轴的坐标;waterfall(…, C)可以指定颜色C。 例如,输入 >> [X,Y,Z] = peaks(30); >> waterfall(X,Y,Z) >> title('The waterfall graph')
158
图3.50 函数的瀑布图
159
11. mesh,meshc,meshz 功能:绘制网格曲线。 格式: mesh(X,Y,Z) mesh(Z) mesh(…,C) mesh(…, 'PropertyName',PropertyValue, …) meshc(…) meshz(…)
160
说明: 函数mesh、meshc和meshz可以绘制出三维空间上的网格曲线。 在mesh(X,Y,Z)中,X、Y为x轴和y轴坐标,Z既为高度值又为颜色值,当X、Y为向量时,设n =length(X)和m=length(Y),则有[m,n] = size(Z),这时(X(i),Y(j),Z(i,j))定义了三维空间上的点;如果X、Y为矩阵,则X、Y、Z必须尺寸一致,(X(i,j),Y(i,j),Z(i,j))定义了三维空间上的点。 在mesh(Z)中,设[m,n] = size(Z),采用X = 1:n和Y = 1:m作为x轴和y轴的坐标,Z为高度和颜色值;mesh(…, C)可以利用矩阵C指定颜色;mesh(…, ‘PropertyName’, PropertyValue, …)可以设定图形对象的特性。
161
meshc(…)则可以在网格曲线的下面绘制出等高线;meshz(…)则在网格曲线的周围绘制出幕布。
例如输入 [X,Y] = meshgrid(-3:.125:3); Z = peaks(X,Y); meshc(X,Y,Z); axis([ ]) title('多峰函数的网格曲线') 执行后可得到如图3.51所示的网格曲线。如果利用meshz函数,则可以得到如图3.52所示的网格曲线。
162
图3.51 利用meshc得到的多峰函数的网格曲线
163
图3.52 利用meshz得到的多峰函数的网格曲线
164
12. meshgrid 功能:为三维绘图产生X、Y数据矩阵。 格式: [X,Y] = meshgrid(x,y) [X,Y] = meshgrid(x) [X,Y,Z] = meshgrid(x,y,z)
165
说明: meshgrid函数可产生x、y轴向的网格数据。 在[X, Y]=meshgrid(x, y)中,向量x、y分别指定x轴向和y轴向的数据点。当x为n维向量,y为m维向量时,X、Y均为m×n的矩阵,X(i, j)和Y(i, j)共同指定了平面上的一点;[X,Y] = meshgrid(x)等效于[X,Y] = meshgrid(x,x);[X,Y,Z] = meshgrid(x,y,z)可以产生三维阵列,它们指定了三维空间上的一个点。
166
13.surf,surfc 功能:绘制出三维空间中的曲面图。 格式: surf(Z) surf(X,Y,Z) surf(X,Y,Z,C) surf(…, 'PropertyName', PropertyValue) surfc(…)
167
说明: surf函数可以绘制出三维空间中的曲面,surfc(…)可以在曲面下绘制出等高线。其函数说明类似于mesh函数。 例如输入 [x,y]=meshgrid(-3:.125:3); z=peaks(x,y); c=ones(size(z)); surfc(x,y,z,c), grid on title('多峰函数的曲面')
168
图3.53 多峰函数的曲面
169
散布图 1.plotmatrix 功能:绘制出矩阵的散布图。 格式: plotmatrix(Y) plotmatrix(X,Y) plotmatrix(…, 'LineSpec') [H,AX,BigAx,P] = plotmatrix(…)
170
说明: plotmatrix(X,Y)可以绘制出矩阵(X,Y)的散布图,当X为p×m矩阵、Y为p×n矩阵时,plotmatrix可以将图形窗口分割成n×m块。plotmatrix(Y)等效于plotmatrix(Y,Y),但这时对位于对角线的块采用hist(Y(:,i))(柱状图)表示。 plotmatrix(…, 'LineSpec')可以指定绘制图形的符号,缺省值为 '.'(点)。 例如,输入 >> x = randn(50,3); y = x*[-1 2 1;2 0 1;1 -2 3;]'; >>plotmatrix(y,'*r')
171
图3.54 数据散布图
172
2.scatter 功能:绘制散布图。 格式: scatter(X, Y, S, C) scatter(X,Y) scatter(X, Y, S) scatter(…, markertype) scatter(…, 'filled') scatter(…, 'PropertyName', propertyvalue)
173
说明: scatter(X,Y,S,C)可以采用着色的圆圈(或某种标记)表示数据的位置,向量X、Y用于指定位置,S用于指定每个标记占用的区域,当S为向量时,必须与X、Y的长度一致,当S为标量时表示采用相同尺寸的标记。C用于确定标记的颜色,当C为向量时,必须与X、Y的长度一致,C也可以采用表示颜色的字符。
174
scatter(X,Y)可以采用缺省的标记尺寸和颜色;scatter(X,Y,S)可以仅指定标记的尺寸,这时只采用一种颜色,因此有时也称为泡沫图;scatter(…,markertype)可以指定标记,缺省时为'o';scatter(…,'filled')可以对标记填充颜色;scatter(…,'PropertyName',propertyvalue)可以设定图形对象的特性。 例如,输入 >> load seamount >>scatter(x,y,5,z)
175
图3.55 散布图
176
3.scatter3 功能:绘制三维散布图。 格式: scatter3(X,Y,Z,S,C) scatter3(X,Y,Z) scatter3(X,Y,Z,S) scatter3(…, markertype) scatter3(…, 'filled')
177
3.8 图 形 函 数 表3.2 (二维)图形函数
179
3.8.1 基本图形和图形操作 1. plot 功能:绘制二维图形(曲线)。 格式: plot(y)
基本图形和图形操作 1. plot 功能:绘制二维图形(曲线)。 格式: plot(y) plot(x1, y1,…) plot(…,'PropertyName', PropertyValue,…) plot(x1, y1, LineSpec,…) h=plot(…)
180
说明: 当y为实向量时,plot (y) 以y的序号作为x轴,以向量y的值作为y轴绘制出二维曲线;当y为复向量时,则plot (y)相当于plot(real(x), imag(y)),即y的实部为x轴,虚部为y轴。在后面几种格式中,虚部均被忽略。 plot(x1, y1, …)可按(x1, y1),(x2,y2), …成对绘制出曲线,而且在同一张图上以不同颜色显示。如果xn或yn之一为矩阵,则取矩阵的行或列与另一个向量构成数据对绘制出曲线。
181
plot(x1,y1,LineSpec, …)可绘制出所有由三元组(xn,yn,LineSpec)指定的曲线,其中LineSpec用于指定线型、标记和线颜色。有关LineSpec的内容可参见下面的注释1。 plot(…, 'PropertyName', PropertyValue, …)可设置图形对象的特性。有关PropertyName和PropertyValue的内容参见axes函数,本节示例中可略见一斑。 h=plot(…)可在绘制出图形的同时,得到图形(曲线)的句柄向量,每条曲线对应于一个句柄值。
182
表3.3 LineSpec指定的线型、颜色和标记
183
注释2:在利用plot函数绘制多条曲线时,plot自动循环采用颜色板中的各种颜色,而这种颜色板可用colormap函数设置,比如:
set(gca, 'LineStyleOrder', '-|-.|--') 表示循环使用实线、点画线和虚线。 例如,要绘制出[−π,π]之间的正弦和余弦曲线,利用MATLAB可使编程变得简单、方便,而且可得到各种图形。
184
MATLAB程序为 x=[-pi:pi/20:pi]; y1=sin(x); y2=cos(x); figure(1) %打开图形窗口 subplot(2,2,1),plot(x,y1) %在左上角绘制出正弦曲线 grid on,title('Sin(x)') %加上栅格和标题 subplot(2,2,2),plot(x,y2,'r:') %在右上角绘制出余弦曲线(点线) grid on,title('Cos(x)') subplot(2,2,3),plot(x,y1,'-',x,y2,'--') %在左下角绘制出正弦、余弦曲线 grid on,title('Sin(x) and Cos(x)') subplot(2,2,4),plot(x,y1,'-',x,y1,'ko') %在右下角绘制出正弦曲线 grid on,title('Sin(x)')
185
图3.56 正弦和余弦曲线
186
loglog函数类似于plot函数,惟一不同的是在对数坐标系中绘制图形,这样对于变化范围较大的曲线,容易显示出直观的图形。
功能:在对数坐标系中绘制图形。 格式: loglog(y) loglog(x1,y1,…) loglog(…,'PropertyName', PropertyValue,…) loglog(x1,y1,LineSpec,…) h=loglog(…) 说明: loglog函数类似于plot函数,惟一不同的是在对数坐标系中绘制图形,这样对于变化范围较大的曲线,容易显示出直观的图形。
187
3. semilogx,semilogy 功能:在半对数坐标系中绘制图形。 格式: semilogx(y) semilogy(x)
semilogx(x1,y1,…) semilogy(x1,y1,…) semilogx(x1,y1,LineSpec…) semilogy(x1,y1,LineSpec…) semilogx(…,'PropertyName', PropertyValue,LineSpec…) semilogy(…,'PropertyName', PropertyValue,LineSpec…) h=semilogx(…) h=semilogy(…)
188
4. ploar 功能:在极坐标系中绘制图形。 格式: polar(theta,rho) polar(theta,rho,LineSpec) 说明: polar函数可在极坐标系中绘制出曲线,并可加上极坐标栅格线,其中theta表示极坐标角度,rho表示半径,LineSpec可指定曲线的线型、颜色和标记。
189
例如输入 t=0:.01:2*pi; figure(1) polar(t,sin(2*t).*cos(2*t), '--r') 执行后得到如图3.57所示的极坐标曲线。 三叶玫瑰线 t=0:.01:2*pi; figure(1); r=3*cos(3*t); h=polar(t,r, '-b');set(h,'LineWidth',2); figure; x=r.*cos(t);y=r.*sin(t); comet(x,y); axis equal; %彗星图
190
图3.57 极坐标系中的曲线
191
5. plotyy 功能:绘制左、右边都包含y轴的图形。 格式: plotyy(x1,y1,x2,y2) plotyy(x1,y1,x2,y2,'function1', 'function2') plotyy(x1,y1,x2,y2, 'function') [AX,H1,H2]=plotyy(…) 说明: plotyy(x1, y1, x2, y2)可绘制出(x1, y1)的曲线,其y轴标记在左边,同时绘制出(x2, y2)曲线,其y轴标记在右边。
192
plotyy(x1,y1,x2,y2, 'function')可利用有字符串function指定的函数来取代默认的plot函数,function可取plot(默认)、semilogx、semilogy、loglog、stem及用户自己编写的M函数文件,但这种函数文件必须具有下列调用格式: h=function(x, y) plotyy(x1,y1,x2,y2,'function1', 'function2')可指定采用不同的函数分别绘制(x1,y1),(x2,y2)曲线。 [AX,H1,H2]=plotyy(…)除了绘制出图形外,还可在AX中得到左、右两个轴的句柄,在H1和H2中得到这两个图形对象的句柄。
193
例如输入 t = 0:pi/20:2*pi; y1 = sin(t); y2 = 0.5*sin(t-1.5); figure(1) plotyy(t,y1,t,y2),grid on 执行后可得到如图3.58所示的曲线。
194
图3.58 双y轴曲线
195
6. figure 功能:建立图形(窗口)。 格式: figure figure(h) figure('PropertyName', PropertyValue,…) h=figure(…)
196
说明: figure可打开一个新的图形窗口,以供后续绘图命令输出图形。当然,当没有打开图形窗口时,直接使用绘图命令可自动打开一个图形窗口。如果已经打开了图形窗口,则绘图命令会在当前图形窗口中绘出图形。 figure('PropertyName', PropertyValue,…)在建立图形窗口的同时设置其特性,这一点可参见表3.4。
197
表3.4 图形特性(Figure Properties)
198
续表
202
7. close 功能:关闭图形窗口,即删除指定的图形。 格式: close close all close(h) close all hidden close name status=close(…)
203
说明: close可删除当前的图形(等效于close(gca));close(h)可删除句柄为h的图形,当h为向量或者矩阵时,则close将删除由h指定的所有图形;close name可删除由name(比如figure No 2)指定的图形;close all可删除所有的图形(不包括句柄隐含的图形);close all hidden可删除所有的图形(包括句柄隐含的图形)。 status=close(…)除了删除图形外,还可以得到删除操作的状态。 ● 1:删除成功。 ● 0:删除失败。
204
8. clf 功能:清除当前图形窗口。 格式: clf clf reset 说明: clf可从当前图形中删除所有的图形对象,但不删除这一图形窗口,这一点与close命令不同。 clf reset 可在当前图形中删除所有的图形对象,并将所有的图形特性(Position除外)复位到缺省值。
205
9. gcf 功能:获得当前图形的句柄。 格式: h=gcf 说明: h=gcf可获得当前图形的句柄。当系统中尚未打开图形窗口时,h=gcf可建立一个图形窗口,并返回句柄h。但有时在不存在图形窗口时不希望建立图形,则可输入 h=get(0,'CurrentFigure') 这时会得到一个空阵列h。
206
10. refresh 功能:重画当前图形。 格式: refresh refresh(h) 说明:refresh可重新画出当前图形;refresh(h)可重新画出由h指定的图形。
207
11. plot3 功能:绘制出三维图形。 格式: plot3(X1,Y1,Z1,…) plot3(X1,Y1,Z1,LineSpec,…) plot3(…, 'PropertyName', PropertyValue, …)
208
说明: plot3(X1, Y1, Z1, …)可绘制出三维图形,其中X1、Y1、Z1用于指定曲线的坐标,它非常类似于二维绘图函数plot;lot3(X1,Y1,Z1,LineSpec,…)可以指定绘图的线型、标记及颜色;plot3(…,'PropertyName',PropertyValue,…)可以设定图形对象的特性。例如输入 t = 0:pi/50:8*pi; figure(1) plot3(sin(t),cos(t),t) grid on,axis square title('三维曲线')
209
figure; comet3(sin(t),cos(t),t); 图3.59 简单的三维曲线
210
又如对于多峰函数,我们可在三维空间中画出三维曲线,MATLAB程序为
[x,y]=meshgrid(-3:.125:3); z=peaks(x,y); figure(1) plot3(x,y,z), grid on title('多峰函数的三维曲线') 执行后可得到如图3.60所示的三维曲线。
211
图3.60 多峰函数的三维曲线
212
图形注释 1. title 功能:给当前坐标系图形加上标题。 格式: title('string') title(…, 'PropertyName', PropertyValue,…) title(fname) h=title(…)
213
说明: 每个坐标系的图形都可以有一个标题,它位于图形顶部的居中位置。 title('string')可将指定字符串用作为标题;title(fname)可将执行指定函数fname时产生的字符串作为标题。 title(…, 'PropertyName', PropertyValue, …)可为标题文本指定特性。h=title(…)还可以得到标题文本的控制句柄。例如,要将今日的日期作为图标题,则输入 title(date) 要在标题中包含变量值,则可输入 a=32.5; title(['The temperature Of Peking is',num2str(a),'\circ'])
214
这时显示结果为 The temperature Of Peking is 32.5° 要在标题中包含变量值,并设定标题为黄颜色,则可输入 n=3 title(['Class',int2str(n)],'Color','y') 这时显示结果为(以黄色显示) Class 3 标题中还可以采用各种字体(如黑体、斜体),如输入 title(\ity=e^{\omega\tau}') 则产生的标题为 y=eωτ
215
2. text 功能:在当前坐标系中建立文本对象。 格式: text(x, y, 'string') text(…, 'PropertyName', PropertyValue, …) text(x, y, z, 'string') h=text(…) 说明: text是一个低级函数,它可将指定的字符串放在图形的指定位置。 text(x, y, 'string') 可在图形的(x, y)点上放置指定的字符串,(x, y)的单位由Unit特性决定。text(x, y, z, 'string')用在三维图形上。
216
text(…, 'PropertyName', PropertyValue, …)可在放置字符串的同时,指定文本的特性,详见表3
text(…, 'PropertyName', PropertyValue, …)可在放置字符串的同时,指定文本的特性,详见表3.5的文本特性;text(…, 'PropertyName', PropertyValue, …)用来指定文本的特性。h=text(…)还可以得到文本对象的句柄。例如,输入 figure(1) plot(0:pi/20:2*pi,sin(0:pi/20:2*pi)); text(pi,0,'\leftarrow sin(x)','Fontsize',18)
217
表3.5 文本特性(Text Properties)
218
续表
220
图3.61 利用text标注曲线
221
图3.62 top、cap、middle、baseline、bottom的相对位置
222
表3.6 Tex字符集 字符序列 符 号 \alpha α \upsilon υ \sim ~ \beta β \phi φ \leq ≤
符 号 \alpha α \upsilon υ \sim ~ \beta β \phi φ \leq ≤ \gamma γ \chi χ \infty ∞ \delta δ \psi ψ \clubsuit ♣ \epsilon ε \omega ω \diamondsuit ♦ \zeta ζ \Gamma Γ \heartsuit ♥ \eta η \Delta Δ \spadesuit ♠ \theta θ \Theta Θ \leftrightarrow ↔ \vartheta ν \Lambda Λ \leftarrow ← \iota ι \Xi Ξ \uparrow ↑ \kappa κ \Pi Π \rightarrow → \lambda λ \Sigma Σ \downarrow ↓ \mu μ \Upsilon Υ \circ \nu \Phi Φ \pm \xi ξ \Psi Ψ \geq ≥ \pi π \Omega Ω \propto ∝ \rho ρ \forall \partial ∂ 字符序列 符 号 \alpha α \upsilon υ \sim ~ \beta β \phi φ \leq ≤ \gamma γ \chi χ \infty ∞ \delta δ \psi ψ \clubsuit ♣ \epsilon ε \omega ω \diamondsuit ♦ \zeta ζ \Gamma Γ \heartsuit ♥ \eta η \Delta Δ \spadesuit ♠ \theta θ \Theta Θ \leftrightarrow ↔ \vartheta ν \Lambda Λ \leftarrow ← \iota ι \Xi Ξ \uparrow ↑ \kappa κ \Pi Π \rightarrow → \lambda λ \Sigma Σ \downarrow ↓ \mu μ \Upsilon Υ \circ \nu \Phi Φ \pm \xi ξ \Psi Ψ \geq ≥ \pi π \Omega Ω \propto ∝ \rho ρ \forall \partial ∂ 字符序列 符 号 \alpha α \upsilon υ \sim ~ \beta β \phi φ \leq ≤ \gamma γ \chi χ \infty ∞ \delta δ \psi ψ \clubsuit ♣ \epsilon ε \omega ω \diamondsuit ♦ \zeta ζ \Gamma Γ \heartsuit ♥ \eta η \Delta Δ \spadesuit ♠ \theta θ \Theta Θ \leftrightarrow ↔ \vartheta ν \Lambda Λ \leftarrow ← \iota ι \Xi Ξ \uparrow ↑ \kappa κ \Pi Π \rightarrow → \lambda λ \Sigma Σ \downarrow ↓ \mu μ \Upsilon Υ \circ \nu \Phi Φ \pm \xi ξ \Psi Ψ \geq ≥ \pi π \Omega Ω \propto ∝ \rho ρ \forall \partial ∂ 表3.6 Tex字符集
224
另外,字符串中还可以使用各种字体: ● \bf:黑体。 ● \it:斜体。 ● \sl:倾斜体。 ● \rm:正体。 ● \fontname{fontname}:指定使用的字体。 ● \fontsize{fontsize}:指定使用的字体尺寸。 数学上、下标可以分别采用“^”、“_”实现。例如,a_2和b^{x+y}可分别产生a2和bx+y。一些特殊符号如“\{}_^”可通过加上前置符“\”实现。
225
3. gtext 功能:利用鼠标在二维图形上放置文本。 格式: gtext('string') h=gtext('string') 说明: gtext('string')可利用鼠标将指定字符串string放在图上的任意位置;h=gtext('string')还可以得到该文本图形对象的句柄。 字符串中可采用Tex字符集中的任意字符,也可以控制其正/斜体、上/下标等,详见text函数。
226
4.xlabel,ylabel,zlabel 功能:在图形中添加x、y、z轴的标记。 格式:
xlabel('string') xlabel(…,'PropertyName',PropertyValue,…) xlabel(fname) h=xlabel(…) ylabel,zlabel有类似格式。
227
说明: 在坐标系的图形中可给x、y、z轴加上标记。xlabel('string')可给x轴上加标记; xlabel(fname)可执行frame,并将输出的字符串用作x轴标记。 xlabel(…,'PropertyName',PropertyValue,…)除了添加x轴标记外,还可设定文本特性;h=xlabel(…)可得到标记文本的句柄。 利用ylabel和zlabel可给y、z轴加上标记。 有关可设定的文本特性参见text中的表3.5。
228
5.legend 功能:给每个坐标系加上插图说明。 格式: legend('string1','string2', …) legend(h, …) legend(strings) legend(…, pos) legend('off') h=legend(…)
229
说明: legend可在图形的指定位置(缺省时为右上角)给出插图说明,对图中的每一条曲线,legend会在指定文本字符串的边上给出线型、记号及颜色。插图说明框可利用鼠标移动。 legend('string1','string2', …)可利用string1,string2,…来说明当前坐标系中的曲线;在legend(strings)中,strings包含着多个字符串,因此它等效于legend(strings(1,:),strings(2,:),…);legend('off')可从当前坐标系中删除插图说明。 legend(h, …)可对由h指定的坐标系进行插图说明的各种操作。
230
legend(…, pos)可利用pos参数指定插图说明的位置:
● pos=[x,y]:明确指定插图说明框左下角的位置。 h=legend(…)还可以得到插图说明的句柄。 注意,legend中的字符串也可使用Tex字符集,详见text函数。
231
坐标系控制 1.subplot 功能:建立和控制多个坐标系。 格式: subplot(m,n,p) subplot('Position', [left,bottom,width,height]) subplot(h) h=subplot(…)
232
说明: subplot可将图形窗口分成矩形窗格,并按行编号,每个窗格上可建立一个坐标系,后续的绘图命令会在当前窗格上绘制图形。 subplot(m,n,p)可将图形窗口分割成m×n个窗格,并将第p个窗格置成当前窗格。 subplot(h)可使句柄为h的坐标系变成当前坐标系。 subplot('Position',[left,bottom,width,height])可在指定位置建立指定尺寸的坐标系。 h=subplot(…)还可以得到新坐标系的句柄。
233
subplot还有一种更简捷的格式: subplot mnp 它等效于subplot(m,n,p)。但subplot 111与subplot(1, 1, 1)不同,它只是一种早期版本的形式,而subplot(1,1,1)表示删去所有的坐标对象。 例如,subplot 221可将图形窗口分成四个窗格,每个窗格分别可用subplot 221、subplot222、subplot 223、subplot 224来表示,如图3.63所示。
234
图 ×2窗格的图形窗口
235
2. hold 功能:在图形窗口中保持当前图形。 格式: hold on hold off hold
236
说明: hold函数可决定所绘制的图形是添加到图形上,还是取代已绘制的图形。 hold on表示保持当前的图形,即新绘制的图形添加到图形上,从而实现一幅图中绘制多条曲线。hold off表示关闭这种保持特性,因此每次绘图时会自动清除以前已绘制的图形。hold命令可在这两种状态(on,off)之间切换。 hold的状态可由ishold函数来测定。
237
3.grid 功能:给图形加上栅格线。 格式: grid on grid off grid 说明: grid on表示给当前坐标系加上栅格线;grid off表示从当前坐标系中删去栅格线;grid命令可在这两种状态(on,off)之间切换。
238
4.axes 功能:建立坐标系图形对象。 格式: axes axes(h) axes('PropertyName',PropertyValue,…) h=axes(…)
239
说明: axes是建立坐标系图形对象的低级函数,因此一般不直接使用。 axes可在当前图形窗口中建立坐标系图形对象,其特性取其缺省值;xes('PropenyName',PropenyValue,…)可采用指定的特性值,axes(h)可使已存在的坐标系h变成当前坐标系。h=axes(…)还可以得到所建坐标系的句柄。 坐标系的特性可用来控制绘图外形和绘图对象,利用这些特性可使绘制图形更加灵活。这里简要地列出坐标系特性,如表3.7所示,详细信息可参见axes函数的在线帮助。
240
表3.7 坐标系特性(Axes Properties )
245
5.axis 功能:控制坐标轴刻度。 格式: axis([xmin xmax ymin ymax]) axis auto axis([xmin xmax ymin ymax zmin zmax]) axis manual v=axis
246
说明: axis函数有多种格式,我们这里仅介绍常用的几种。axis函数的功能通常可通过设置坐标系特性来获得。 axis([xmin xmax ymin ymax])可为x轴和y轴设置一个极限范围;axis([xmin xmax ymin ymax zmin zmax]可同时设置x、y、z轴的范围;v=axis可得到当前坐标系的轴范围。 axis auto可将当前坐标系的轴范围设置为自动方式,即由绘图数据来确定轴范围,这种格式可指定特定的轴,如axis'auto x'可将x轴设置为自动方式,axis'auto yz'可将y和z轴设置为自动方式。
247
6.box 功能:控制坐标系边框。 格式: box on box off box 说明: box on 可在当前坐标系中显示一个边框,这是缺省情况。box off可去掉边框,这时图中只含坐标轴;box命令可在这两种状态之间切换。
248
3.8.4 其它重要函数 1.get 功能:获得图形对象的特性。 格式: get(h)
其它重要函数 1.get 功能:获得图形对象的特性。 格式: get(h) get(h,'PropertyName') a=get(O,'FactoryObjectTypePropertyName') P=get(H, pn) a=get(h,'Default') a=get(0, 'Factory') a=get(h,'DefaultObjectTypePropertyName')
249
说明: get(h)可获得由h指定的图形对象的所有特性及其当前值;get(h,'PropertyName')只得到指定的特性值;在P=get(H, pn)中,H为m维向量,表示多个图形对象,pn为n元阵列,表示多个特性名称,P为m×n矩阵,则P中得到了各个图形对象的特性值。 a=get(0,'Factory')可得到用户可设置特性的出厂值(生产厂家指定值),a为一种结构,其域名为对象特性名,域值为其特性值。当不指定输出变量时,则MATLAB直接将结果显示在屏幕上;a=get(O,'FactoryObjectTypePropertyName')可得到指定对象类型的指定特性的出厂值,例如:
250
a=get(O,'FactoryFigureColor')
可得到图形颜色的出厂值。 a=get(h,'Default')可得到指定对象h的当前缺省值; a=get(h,'DefaultObject-TypePropertyName')可得到指定对象类型的指定特性的缺省值,例如: A=get(h,'DefaultFigureColor') 可得到图形颜色的缺省值。
251
2.set 功能:设置图形对象的特性。 格式: set(H,'PropertyName', PropertyValue, …) set(H,pn,pv, …) set(H,a) set(H,pn,P)
252
说明: set(H,'PropertyName, PropertyValue', …)可对由H指示的对象设置指定的特性,H可以是向量,这时可设置多个对象的特性;在set(H,a)中,a为结构阵列,这样可对多个对象设置多个特性;在set(H,pn,pv, …)中,pn为n元阵列,用来指定多个特性,pv也为n元阵列,用来指定相应的特性值;在set(H,pn,P)中,P为m×n元的单元阵列,用于指定多个对象的多个特性。
253
set函数还有一些其它格式,这里不再赘述,详见set函数的在线帮助。
例如,要将当前坐标系的颜色设置成蓝色,则可输入 set(gca, 'Color', 'b') 要将图中所有的线颜色改成黑色,则输入 set(findobj('Type', 'line'), 'Color', 'k')
254
3.rotate 功能:沿着指定方向旋转对象。 格式: rotate(h,direction,alpha) rotate(…,origin) 说明: rotate可在三维空间上按右手准则旋转图形对象。rotate(h,direction,alpha)可将指定对象h旋转alpha度,direction为二元或三元向量,它与原点相连构成旋转轴。如在三维空间上,由P点和原点构成旋转轴,旋转方向由右手准则确定,如图3.64所示。
255
图3.64 图形对象旋转轴和旋转方向
256
rotate(…, origin)可用三元向量origin指定旋转原点,缺省时旋转原点处于绘图框的中心。
例如,对于多峰函数peaks,我们可通过旋转得到不同的视图,输入 >> zdir=[0 0 1]; center=[ ]; >> figure(1); >> subplot(2,2,1), surf(peaks); %原图 >> subplot(2,2,2), h2=surf(peaks); %中心在原点,沿z轴旋转90° >> rotate(h2,zdir,90) >> subplot(2,2,3), h3=surf(peaks); %中心在原点,沿z轴旋转−90° >> rotate(h3,zdir, -90) >> subplot(2,2,4), h4=surf(peaks); %中心在(10,10,0),沿z轴旋转90° >> rotate(h4,zdir,90,center)
257
图3.65 多峰曲面的旋转
258
4.colormap 功能:设置和获取当前图形的颜色板。 格式: colormap(map) colormap('default') cmap=colormap
259
说明: 颜色板是一个m×3的矩阵,其值在0.0~1.0之间,分别表示红、绿、蓝三种颜色,颜色板的每一行定义了一种颜色。 colormap(map)可将颜色板设置成map,当map中含有[0.0,1.0]之外的值时,MATLAB会产生一个出错信息:colormap('default')可将颜色板设置成缺省的颜色板;cmap=colormap可得到当前使用的颜色板矩阵。 注释1:指定颜色板。MATLAB提供了许多颜色板函数,每一个函数可产生多种颜色,例如: colormap(hsv(128)) 可产生包含128种颜色的hsv颜色板。当不指定其尺寸时,则MATLAB会产生与当前颜色板同等数量的颜色。
260
注释2:MATLAB系统提供了许多颜色板,它们是:
● autumn:从红到橙到黄之间平滑变化。 ● bone:灰度颜色板,它适用于显示图像。 ● colorcube:它包含许多在RGB颜色空间中规则分布的颜色,并且提供了更多的灰度、纯红、纯绿和纯蓝颜色。 ● cool:包含从暗青色到暗洋红色之间的颜色,它从青色到洋红色之间平滑变化。 ● copper:从黑色到黄铜色之间平滑变化。
261
● flag:由红、白、蓝和黑四种颜色构成。
● gray:产生线性的灰度颜色板。 ● hot:从黑色到暗红、洋红、黄色、白色平滑变化。 ● hsv:颜色从红、黄、绿、青、蓝、洋红,再回到红,循环变化。 ● jet:颜色从蓝、红、青、黄到洋红变化。 ● line:产生由坐标系的ColorOrder特性和暗灰色指定的颜色板。 ● pink:包含粉红色彩色蜡笔的阴影,它适用于黑白照片。 ● prism:重复六种颜色:红、洋红、黄、绿、蓝和紫罗蓝。 ● spring:由紫红和黄色构成的颜色。 ● summer:由绿色和黄色构成的颜色。 ● white:全白的单色颜色板。 ● winter
262
为了进一步了解各种颜色板的颜色,可输入 cmap=colormap; L=length(map); x=1:L;y=x'*ones(size(x)); bar(x(1:2), y(1:2, :)) 这时以条形图给出当前颜色板的颜色,再输入 colormap(hsv) 可显示出hsv颜色板中的颜色,输入 colormap(gray) 可显示出gray中的各级灰度。其它颜色板也可用类似方法得到。
263
习 题 1.画出对数和指数函数曲线,并分别加上标题、轴标记和曲线说明(这里可采用多种方法来标注曲线)。
习 题 1.画出对数和指数函数曲线,并分别加上标题、轴标记和曲线说明(这里可采用多种方法来标注曲线)。 2.将图形窗口分成两格,分别绘制正割和余割函数曲线,并加上适当的标注。 3.设有函数y=ex+5+x3,在半对数坐标系中绘制出曲线(x∈[1,10])。 4.绘制出多峰函数peaks和三角函数的多条曲线。
264
5.将图形窗口分成两个窗格分别绘制出以下函数在[-3,3]区间上的曲线:
yl=2x+5 y2=x2-3x+1 并利用axis调整轴刻度,使它们具有相同的缩放尺寸。 6.按图3.19的方式显示出autumn、bone、cool、hot、hsv、gray、flag、line等颜色板的颜色条形图。 7.有一位研究生,一年中平均每月的费用为生活费190元、资料费33元、电话费45元、购买衣服42元以及其它费用45元。请以饼图表示出他每月的消费比例,并分离出表示资料费用的切片。请给图中每一块加以标注。
265
8.画出下列函数的三维曲线和网格曲线: z= (x-2)2+(y-1.2)2 9.画出下列函数的曲面及等高线图: z=x2+y2+sin(xy) 10.画出各种大小和形状的球、柱体。
Similar presentations