目录
(9)plot(x1,y1,str1,x2,y2,str2,...)。
二维图形是MATLAB图形的基础,也是应用最广泛的图形类型之一。MATLAB基本的二维图形包括线型(Line Plots)、散点型(Scatter Plots)、条型(Bar Plots)、极坐标型(Polar Plots)及矢量图型(Vector Fields)等。
(一)plot绘图指令
(1)plot(x,y)
以x为横坐标,y为纵坐标,按照坐标(xj,yj)的有序排列绘制曲线。
(2)plot(y)。
其中 y 为一维实数数组,以1:n为横坐标,yj为纵坐标,绘制曲线(n为y的长度)。
(3)plot(z)。
其中 z 为一维复数数组,以横轴为实轴,纵轴为虚轴,在复平面上绘制(real(zj),imag(zj))的有序集合的图形。
(4)plot(A)。
绘制矩阵A的列对它的下标的图形。对于m×n的矩阵A,有n个含有m个元素的数对,或是n条有m个点的曲线,且这n条曲线均采用颜色监视器上不同的颜色绘制而成。
(5)plot(x,A)。
绘制矩阵A对向量x的图形。对m×n的矩阵A和长度为m的向量x,绘制矩阵A的列对向量x的图形;如果x的长度为n,则绘制矩阵A的行对向量x的图形。向量x可以是行向量,也可以是列向量。
(6)plot(A,x)。
对矩阵A绘制向量x的图形。对于一个m×n的矩阵A和一个长度为m的向量x,对矩阵A的列绘制向量x的图形;如果x的长度为n,则对矩阵A的行绘制向量x的图形。向量x可以是行向量,也可以是列向量。
(7)plot(A,B)。
对矩阵A的行绘制矩阵B的列的图形。如果A和B都是m×n的矩阵,则将绘制n条由m个有序对连成的曲线。
(8)plot(x,y,str)。
用字符串str指定的颜色和线型对y绘制x的图形。
(9)plot(x1,y1,str1,x2,y2,str2,...)。
用字符串str1指定的颜色和线型对y1绘制x1的图形,用字符串str2指定的颜色和线型对 y2绘制 x2的图形......每组参数值可以采用上述除复数值以外的任何一种形式。str1,str2...可以省略,此时,MATLAB自动为每条曲线选择颜色和线型。
(二)格栅 grid on\grid off
添加格栅可以对具体数值有更加清楚的展示:
- grid on 命令可以在当前图形的单位标记出添加格栅
- grid off命令可以取消格栅的显示
- 单独使用grid命令则可以在on与off状态下交替转换,即起到触发的作用
在这里就不演示了,大家都是聪明人,一定懂得~~~
(三)文字说明(标注、文字格式)
通常,曲线所表示的函数或数据的规律都需要进行一些文字的说明或标注。图形窗口中的文本操作指令如下:
- title('text') 在图形窗口顶端的中间位置输出字符串"text"作为标题
- xlabel('text') 在x轴下的中间位置输出字符串"text"作为标注
- ylabel('text') 在y轴边上的中间位置输出字符串"text"作为标注
- zlabel('text') 在z轴边上的中间位置输出字符串"text"作为标注
- text(x,y,'text') 在图形窗口的(x,y)处写字符串"text"若x和y是长度相同的向量,字符串写在(x_i,y_i)的位置上若"text"是一个字符串矩阵,即字符矩阵,且与行数与xy的长度相同,则第i行的字符串写在位置(x_i,y_i)
- text(x,y,'text','sc') 在图形窗口的(x,y)处输出字符“text”,给定左下角的坐标为(0.0,0.0),右上角的坐标则为(1.0,1.0)。gtext('text')通过使用鼠标或方向键,移动图形窗口中的十字光标,让用户将字符串 text 放置在图形窗口中。当十字光标走到所期望的位置时,用户按下任意键或单击任意按钮,字符串将会写入窗口中。
- legend(str1,str2,..pos) 在当前图形上输出图例(说明每条曲线对应的名字),以str1、str2等做标注,pos为位置参数,用于控制图例框的位置但也可以直接插入图例,鼠标移动位置并双击编辑。其中,参数pos可选为:
- legend(str1,str2,...,'Location','pos'):在当前图形上输出图例,并用说明性字符串str1、str2等做标注。其中,参数pos可选为:
- legendoff 从当前图形中清除图例
例1:图窗内文字说明示例
clear;
clc;
x=0:0.01*pi:pi*0.5;y=cos(x)+sqrt(-1)*sin(x);
plot(y*2,'r','LineWidth',5);hold on;
x=pi*0.5:0.01*pi:pi;y=cos(x)+sqrt(-1)*sin(x);
plot(y*2,'y','LineWidth',5);hold on;
x=-pi:0.01*pi:-pi*0.5;y=cos(x)+sqrt(-1)*sin(x);
plot(y*2,'b','LineWidth',5);hold on;
x=-pi*0.5:0.01*pi:0;y=cos(x)+sqrt(-1)*sin(x);
plot(y*2,'g','LineWidth',5);hold on;
title('极坐标')
text([1.5 -3 1.5 -3],[2 2 -2 -2],{'第一象限','第二象限','第三象限','第四象限'})
legend({'[0 0.5\pi]','[0.5\pi \pi]','[\pi 1.5\pi]','[1.5\pi 2\pi]'})
xlim([-5 5]);ylim([-5,5]);
plot([-4 4],[0 0],'k','LineWidth',3);hold on;
plot([0 0],[-4 4],'k','LineWidth',3);hold on;
axis off
运行结果:
MATLAB 中的字符串可以对输出的文字风格进行预先设置,可以预先规定的有字体、风格及大小。另外,可以进行上、下标的表示,还可以输出数学公式中经常用到的希腊字符和其他特殊字符。这些指令及特殊符号的输出方法。
字体式样设置规则:
下标的控制指令:
希腊字母:
其他特殊符号:
(四)线型、标记和颜色
当同一张图形中同时画了多条曲线时,需要使用不同的线型、标记或颜色来区分不同的曲线
1.线型
MATLAB平台中共有5种不同线型:
2.标记
MATLAB平台中共有14种不同的标记方式:
3.颜色
MATLAB平台中有代号的颜色共有8种:
例2:线型、标识与颜色示例
clear;
clc;
figure
x=0:0.01*pi:pi*8;
plot(x,sin(x),'r:','LineWidth',3);hold on;
plot(x,2*sin(x/2),'y','LineWidth',3);hold on;
plot(x,4*sin(x/4),'b--','LineWidth',3);hold on;
x=0:pi:pi*8;
plot(x,sin(x),'g^','MarkerSize',10,'LineWidth',3);hold on;
plot(x,2*sin(x/2),'co','MarkerSize',10,'LineWidth',3);hold on;
plot(x,4*sin(x/4),'msquare','MarkerSize',10,'LineWidth',3);hold on;
xlim([0 pi*8])
运行结果:
在MATLAB平台上还有一种叫作颜色映像的数据结构来代表颜色值。颜色映像定义为一个有3列和若干行的矩阵。利用0~1之间的数值,矩阵的每一行都代表了一种色彩。任一行的数字都指定了一个RGB值,即红、绿、蓝3种颜色的强度,形成一种特定的颜色。一些有代表性的RGB值如
有10个MATLAB函数产生预定的颜色映像:
在默认情况下,上面所列的各个颜色映像产生一个64×3的矩阵,指定了64种颜色RGB的描述。这些函数都接收一个参量来指定所产生矩阵的行数。比如hot(m)产生一个m×3的矩阵,它包含的RGB颜色值的范围从黑经过红、橘红、黄......一直到白
(五)坐标轴设置
图形坐标轴的取值范围及其刻度对图形的显示效果有着很明显的影响。
在默认情况下,MATLAB通过内部自适应设置来选择坐标轴,但有时候默认设置生成的图形往往达不到用户所要求的效果,或者用户只对图形中某一部分感兴趣时,就需要通过坐标轴控制函数,有针对地调整和设置坐标轴的某些参数
MATLAB提供的坐标轴控制函数:
例3:坐标轴设置示例
clear;
clc;
figure
x=(0:1800)*pi/180;y=cos(x/2);
subplot(1,3,1);plot(x,y,'LineWidth',2);xlim([0 30]);grid on;
subplot(1,3,2);plot(x,y,'LineWidth',2);xlim([0 30]);grid on;grid;
subplot(1,3,3);plot(x,y,'LineWidth',2);xlim([0 30]);grid ;grid off;
运行结果:
(六)图形叠绘
plot 指令可以在同一次调用中画出多条曲线,在实际应用中,经常遇到在已经存在的图上绘制新的曲线,并保留原来的曲线,MATLAB 中的以下指令可以完成这项功能。
- hold on语句:语句功能为使当前轴及图形保留下来而不被刷新,并接收即将绘制的新的曲线。
- hold off语句:语句功能为不保留当前轴及图形,绘制新的曲线后,原图即被刷新。
- hold语句:语句功能为hold on语句与hold off语句的切换
例4:图形叠绘示例
clear;
clc;
figure
x=0:0.01*pi:pi*8;
subplot(1,2,1)
plot(x,sin(x),'r:','LineWidth',3);hold on;
plot(x,2*sin(x/2),'y','LineWidth',3);hold on;
plot(x,4*sin(x/4),'b--','LineWidth',3);hold on;
subplot(1,2,2)
plot(x,sin(x),'r:','LineWidth',3);hold on;
plot(x,2*sin(x/2),'y','LineWidth',3);hold on;hold;
plot(x,4*sin(x/4),'b--','LineWidth',3);hold;hold off;
运行结果:
(七)子图绘制
MATLAB 允许用户在同一个图形窗中同时绘制多幅相互独立的子图,这需要应用到subplot指令,其句法格式如下:
- subplot(m,n,k):将(m×n)幅子图中的第k幅图作为当前曲线的绘制图。
- subplot('position',[left bottom width height]):在指定位置上生成子图,并作为当前曲线的绘制图。
Subplot指令说明:
(1)subplot(m,n,k)指令生成的图形窗中将会有(m×n)幅子图,k是子图的编号,编号的顺序为:左上为第一幅子图,然后向右后向下依次排号,该指令产生的子图分割与占位完全按照默认值自动进行。
(2)subplot('position',[left bottom width height])指令所产生的子图的位置由用户指定,指定位置的4个元素采用归一化的标称单位,即认为图形窗的宽、高的取值范围均为[0,1],左下角的坐标为(0,0)。
(3)指令所产生的子图彼此之间相互独立,所有的绘图指令都可以在任一子图中运用,而对其他的子图不起作用。
(4)在使用subplot指令之后,如果再想绘制充满整个图形窗的图时,则应当先使用clf指令对图窗进行清空。
例5:子图绘制示例
clear;
clc;
figure
x=(0:1800)*pi/180;y=cos(x/2);
subplot(1,3,1);plot(x,y,'LineWidth',2);xlim([0 30]);grid on;
subplot(1,3,2);plot(x,y,'LineWidth',2);xlim([0 30]);grid on;grid;
subplot(1,3,3);plot(x,y,'LineWidth',2);xlim([0 30]);grid ;grid off;
运行结果:
(八)交互式绘图
MATLAB中还设置了相应的鼠标操作的图形操作指令,分别是ginput、gtext和zoom函数。首先对这3个函数进行一般性的说明。
(1)除了ginput函数只能应用于二维图形,其余两个函数对二维和三维图像均适用。
(2)ginput函数与zoom函数配合使用,可以从图形中获得较为准确的数据。
(3)在逻辑顺序并不十分清晰的情况下,并不提倡这几个指令同时使用。
1.ginput指令
其调用格式如下:
[x,y]=ginput(n):其功能为用鼠标从二维图形中获得n个点的数据坐标(x,y)。
使用ginput指令时需要注意的是,指令中的n应当赋值为正整数,指令中的x和y用来存放所取点的坐标。该指令运行之后,会将当前图像从后台调度到前台。同时,鼠标光标变为十字形。用户可以移动鼠标,将其定位于待取点的位置处,单击则可获得该点的数据值,然后通过相同的方式取得之后的n-1组数据值,当n组数据全部取得之后,图形窗便退回后台,回到ginput指令执行前的环境中。
2.gtext指令
其调用格式如下:
gtext(arg):其功能为用鼠标把字符串或字符串元胞数组放置到图形中作为文字说明。
使用gtext指令时需要注意的是,运行该指令后,会将当前的图像从
后台调度到前台。同时,鼠标光标变为十字形。用户可以移动鼠标,将其定位于待放置的位置处,右击,字符串将被放在紧靠十字中心点的“第一象限”位置上。
如果输入的arg是单个字符串,单击则可以一次性将所有字符以单行的形式放置在图形之中;如果arg中包含多行字符串,则每次单击可将其中的一行字符串放置在图形之中,直到将所有的字符串全部放置在图形之中后,操作才全部完成。
3.zoom指令
zoom指令的具体应用句法有几种格式:
注意:使用zoom指令时,变焦操作方式与标准的Windows缩放相同,在可变焦的当前图形上,可直接单击进行图形的放大,也可以长按鼠标左键括住需要放大的区域,放开鼠标左键之后,指定的区域则会被放大,右击则可进行图形的缩小。默认的变焦因子是2,即单击时图形被放大一倍,右击时图形被缩小一半。
(九)双坐标轴绘制
在实际应用中,常常需要把同一自变量的两个不同量纲、不同量级的函数量的变化同时绘制在同一个图形窗中。
MATLAB中的plotyy函数可以实现上述功能,其调用格式如下:
- plotyy(X1,Y1,X2,Y2):以左、右不同的纵轴分别绘制X1-Y1和X2-Y2两条曲线。
- plotyy(X1,Y1,X2,Y2,Fun):以左、右不同的纵轴以 Fun 指定的形式分别绘制X1-Y1和X2-Y2两条曲线。
- plotyy(X1,Y1,X2,Y2,Fun1,Fun2):以左、右不同的纵轴分别以Fun1、Fun2指定的形式绘制X1-Y1和X2-Y2两条曲线。
使用plotyy指令时需要注意的是,左侧的纵轴用来描述X1-Y1曲线,右侧的纵轴用来描述X2-Y2曲线。轴的范围与刻度值都是自动生成的,进行人工设置时,使用的绘图指令与一般的绘图指令相同。
例6:双坐标轴绘制示例
clear;
clc;
figure
x=0:0.01*pi:pi*2;
y=sin(0:0.01*pi:pi*2);
z=x.*(cos(x)+sqrt(-1)*sin(x));
[a,b,c]=plotyy(0:200,abs(z),0:200,angle(z)*180/pi);
set(get(a(1),'Ylabel'),'String','amplitude')
set(get(a(1),'Ylabel'),'String','phase')
set(b,'LineWidth',3)
set(c,'LineStyle',':','LineWidth',3)
运行结果:
(十)fplot绘图指令
plot指令只能将用户指定的或者计算而得的数据转换为图形,但如果自变量的离散间隔不合理,就无法反映函数的变化趋势
fplot指令可以通过MATLAB内部设置的自适应算法来动态决定自变量的离散间隔,主要用来根据函数表达式和自变量所属区间来直接绘制函数曲线,不需要给出像plot需要给出的自变量和因变量的数组,因此当函数表达式已知的情况,使用fplot绘制函数曲线相对简单一些
fplot指令的调用格式如下:
- fplot(fun,limits):在limits定义的自变量的取值范围[xmin,xmax]内,或者在自变量与因变量的取值范围[xmin,xmax;ymin,ymax]内,绘制fun函数。
- fplot(fun,limits,LineSpec):在limits定义的取值范围内,在LineSpec所规定的线型、颜色、标记等属性下,绘制fun函数。
- fplot(fun,limits,tol):在limits定义的取值范围内,在tol所规定的相对误差允许范围内,绘制fun函数。
- fplot(fun,limits,tol,LineSpec):在limits定义的取值范围内,在LineSpec所规定的线型、颜色、标记等属性下,在tol所规定的相对误差允许范围内,绘制fun函数。
- fplot(fun,limits,n):在limits定义的取值范围内绘制fun函数,至少绘制n+1个点。使用fplot指令时需要注意的是:tol为相对误差允许范围,其默认值为2e-3,n的默认值为1,即fplot指令至少绘制两个点,对n进行设置后,最大的步长限制为(xmax-xmin)/n。
例7:fplot绘图示例
clear;
clc;
fplot(@sin,[-2*pi 2*pi])
grid on
title('sin(x) from -2*pi to 2*pi')
xlabel('x')
ylabel('y')
运行结果:
(十一)ezplot绘图指令 (隐函数绘图、参数方程绘图)
ezplot指令用于绘制函数在某一自变量区域的图形,与fplot指令相同的是,ezplot指令也需要对自变量的范围进行规定
其具体句法格式如下:
ezplot(fun) 按默认自变量范围(-2*pi,2*pi)绘制函数fun
ezplot(fun,[min,max]) 设置x方向的变化范围为[min,max],绘制函数fun
ezplot(fun,[xmin,xmax,ymin,ymax]) x方向变量范围为[xmin,xmax],y方向变量范围为[ymin,ymax]
设fun2(x,y)为隐函数
ezplot(fun2) 绘制fun2(x,y)=0,x、y默认取值范围均为[-2*pi,2*pi]
ezplot(fun2,[xymin,xymax]) x、y范围为[xymin,xymax]
ezplot(fun2,[xmin,xmax,ymin,ymax]) xmin<x<xmax, ymin<y<ymax
参数方程,funx=fx(t),funy=fy(t)
ezplot(funx,funy) t的默认范围为(0,2*pi)
ezplot(funx,funy,[tmin,tmax]) tmin<t<tmax
例8:explot绘图示例
(十二)特殊坐标轴绘制(对数坐标轴)
在实际的很多的情况中,数据都出现指数型的变化规律,如果此时再用线型刻度来描述曲线,则处于低次幂的部分数据无法清晰地表现出来
1.semilogx函数
- semilogx函数的调用格式与plot基本相同,此处不再赘述每一个句法的功能。
- semilogx(Y)。
- semilogx(X1,Y1,X2,Y2,...)。
- semilogx(X1,Y1,LineSpec1,X2,Y2,LineSpec2,...)。
- semilogx(...,'PropertyName ',PropertyValue,...)。
- semilogx函数绘制图形时,x轴采用对数坐标。若没有指定使用的颜色,当所画线条较多时,semilogx函数将自动使用由当前的ColorOrder和LineStyleOrder属性所指定的颜色顺序和线型顺序来绘制线条。
例9:semilogx函数与plot函数指令对比。
clear;
clc;
figure
x=10.^(0.1:0.1:4);y=1./(x+1000);
subplot(1,2,1);semilogx(x,y,'-','MarkerSize',5,'LineWidth',2);
title('y=(x+1000)^(-1)')
subplot(1,2,2);plot(x,y,'+','MarkerSize',5,'LineWidth',2);
title('y=(x+1000)^(-1)')
运行结果:
2.semilogy函数
semilogy函数的调用格式与semilogx相同,绘制图形时,y轴采用对数坐标。若没有指定使用的颜色,当所画线条较多时,semilogy 将自动使用由当前的 ColorOrder 和LineStyleOrder属性所指定的颜色顺序和线型顺序来绘制线条。
例10:semilogy与plot指令对比
clear;
clc;
figure
x=10.^(0.1:0.1:4);y=1./(x+1000);
subplot(1,2,1);semilogy(x,y,'-','MarkerSize',5,'LineWidth',2);
title('y=(x+1000)^(-1)')
subplot(1,2,2);plot(x,y,'+','MarkerSize',5,'LineWidth',2);
title('y=(x+1000)^(-1)')
运行结果:
3.loglog函数
loglog函数的调用格式与semilogx相同,绘制图形时,x轴与y轴均采用对数坐标。
例11:loglog与plot指令对比
clear;
clc;
figure
x=10.^(0.1:0.1:4);y=1./(x+1000);
subplot(1,2,1);loglog(x,y,'-','MarkerSize',5,'LineWidth',2);
title('y=(x+1000)^(-1)')
subplot(1,2,2);plot(x,y,'+','MarkerSize',5,'LineWidth',2);
title('y=(x+1000)^(-1)')
运行结果:
(十三)二维特殊图形函数
在MATLAB中,除了可以通过plot函数等绘制特殊图形,还可以通过一些函数绘制柱状图、饼状图等特殊图形。常见的特殊二维图形函数有:
1.bar函数
bar函数用于绘制二维垂直条形图,用垂直条形显示向量或矩阵中的值。其调用格式如下:
- bar(y):为每一个y中的元素画一个条状。
- bar(x,y):在指定的横坐标x上画出y,其中x为严格单增的向量。若y为矩阵,则bar把矩阵分解成几个行向量,在指定的横坐标处分别画出。
- bar(...,'bar_color '):“bar_color”定义条的颜色。
- bar(axes_handle,...):将图形绘制到坐标轴句柄 axes_handle 中,而不是当前坐标轴句柄中。
例12:创建二维垂直条形图
例13:二维直方图有两种类型:垂直直方图和水平直方图。而每种类型又有两种表现模式:累计式和分组式。
2.pie函数
- pie函数用于绘制饼形图。其调用格式如下:
- pie(x):绘制参数x的饼图。
- pie(x,explode):explode是与x同维的矩阵,若其中有非零元素,x矩阵中相应位置的元素在饼图中对应的扇形将向外移出一些,加以突出。
- pie(...,labels):labels用于定义相应块的标签。
- pie(axes_handle,...):将图形绘制到坐标轴句柄 axes_handle 中,而不是当前坐标轴句柄中。
- h = pie(...):返回绘制的饼图相关的句柄。
例14:创建二维饼图和三维饼图。
clear;
clc;
figure
x=[1 5 0.5 3.5 2];
explode=[0 1 0 0 0];
subplot(1,2,1);pie(x,explode) %绘制饼图
colormap jet
subplot(1,2,2);pie3(x,explode) %绘制三维饼图
colormap hsv
运行结果:
3.hist函数
hist函数用于绘制二维条形直方图,可以显示出数据的分布情况。所有向量y中的元素或者矩阵Y的列向量中的元素是根据它们的数值范围来分组的,每一组作为一个条形进行显示。条形直方图中的x轴反映了数据y中元素数值的范围,直方图的y轴显示出参量y中的元素落入该组的数目。其调用格式如下:
- n = hist(y):把向量y中的元素放入等距的10 个条形中,且返回每一个条形中的元素个数。若y为矩阵,则该命令按列对y进行处理。
- n = hist(y,x):参量x为向量,把y中元素放到m(m=length(x))个由x中元素指定的位置为中心的条形中。
- n = hist(y,nbins):参量nbins为标量,用于指定条形的数目。
- [n,xout] = hist(...):返回向量n与包含频率计数与条形的位置向量xout,用户可以用命令bar(xout,n)画出条形直方图。
- hist(...):生成直方图,但不产生输出。
- hist(axes_handle,...):将图形绘制到坐标轴句柄 axes_handle中,而不是当前坐标轴句柄中。
例15:绘制直方图
4.scatter函数
scatter函数用于绘制散点图。其调用格式如下:
- scatter(x,y):以x、y的值为横、纵坐标,绘制散点。
例16:绘制散点图示例
clear;
clc;
figure
x=[1 5 6 7 9 5 1 3 12 20];
y=[20 15 6 3 1 5 3 0 1 5];
subplot(1,2,1);scatter(x,y) %绘制散点图
subplot(1,2,2);scatter(x,y,[],[1 0 0],'fill') %绘制散点图
运行结果: