MATLAB绘图

强大的绘图功能是MATLAB的特点之一。MATLAB可以给出数据的二维、三维乃至四维的图形表现,MATLAB提供了两个层次的绘图操作:一种是对图形句柄进行的低层图形命令,另一种是建立在低层绘图操作之上的高层绘图操作。高层绘图操作简单明了、方便高效,是用户最常用的绘图方法,而低层绘图操作和表现能力更强,为用户更加自主地绘制图形创造了条件。本节只介绍绘制二维和三维图形的高层绘图函数。

一、 二维图形

1. 绘制二维曲线的最基本函数

MATLAB中,最基本且应用最广泛的绘图函数为plot函数,利用它可以在二维平面上绘制出不同的曲线。

1.1 plot函数的基本用法

plot函数用于绘制x --- y平面上的线性坐标曲线图,因此需要一组x坐标以及与各个x对应 的y坐标。plot函数的基本调用格式为:

      plot(x,y)

其中x和y为长度相同的向量,分别用于存储x坐标和y坐标数据。

1  在区间0≤x≤2π内,绘制曲线.

程序如下:

      x=0:pi/100:2*pi;

      y=2*exp(-0.5*x).*sin(2*pi*x);

plot(x,y)

执行程序后,打开一个图形窗口,其中绘出了所要求的曲线,如图1。

 

1

注意:求y时,指数和正弦函数之间要用点乘运算,而因2为标量,所以2与指数函数之间可以用乘法运算。这样,x和y所包含的元素个数相等,y(i)是x(i)点的函数值。

上面所提到的plot函数的自变量x,y为长度相同的向量,这是最基本的情况,实际应用中还有其他一些变化:

(1)当x,y是同维矩阵时, 则以x,y对应列元素为横、纵坐标分别绘制曲线,曲线条数等于矩阵的列数。

(2)当x是向量,y是有一维与x同维的矩阵时,则绘制出多种不同色彩的曲线。曲线条数等于y矩阵的另一维数,x被作为这些曲线共同的横坐标。如:下程序可在同一坐标中绘制出正弦和余弦曲线(见图2)。

  2   x=linspace(1,2*pi,100); %把0到2π等分100份,生成一个行向量

y=[sin(x);cos(x)];

plot(x,y)

 

2

 (3) plot函数最简单的调用格式是只包含一个输入参数:plot(x)。在这种情况下,当x是实向量时,以该向量元素的下标为横坐标,元素值为纵坐标画出一条连续曲线,这实际上是绘制折线图。当x是实矩阵时,则按列绘制,每列元素值相对其下标的曲线,曲线条数等于x阵的列数。

 

 

1.2 含多个输入参数的plot函数

plot函数可以包含若干组向量对,每一向量对可以绘制出一条曲线。含多个输入参数的plot函数调用格式为: plot(x1,y1,x2,y2,…,xn,yn)  

其中x1和y1,x2和y2,…,xn和yn分别组成一组向量对,每一组向量对的长度可以不同。每一向量对可以绘制出一条曲线,这样可以在同一坐标内绘制出多条曲线。

1.3 含选项的plot函数

MATLAB提供了一些绘图选项,用于确定所绘曲线的线型、颜色和数据点标记符号。这些选项如表所示,可以组合使用。例如,b_.表示蓝色点划线,y:d表示黄色虚线并用菱形符标记数据点。当选项省略时,MATLAB规定,线型一律用实线,颜色将根据曲线的先后顺序依次采用表给出的前7种颜色。含选项的plot函数调用格式为: plot(x1,y1,选项1,x2,y2, 选项2,…,xn,yn选项n)  

  

线 型 选 项

颜色选项

标记符号选项

线型

说明

颜色

说明

标记符号

说明

标记符号

说明

-

实线

b

蓝色

.

s

方块符(square)

:

虚线

g

绿色

圆圈

d

菱形符(diamond)

-.

点划线

r

红色

叉号

朝下三角符号

- -

双划线

c

青色

+

加号

朝上三角符号

 

 

m

品红色

*

星号

<

朝左三角符号

 

 

y

黄色

 

 

>

朝右三角符号

 

 

k

黑色

 

 

p

 五角星符(pentagram)

 

 

w

白色

 

 

h

六角星符(hexagram)

1

  线型、颜色和标记符号选项

3  用不同线型和颜色在同一坐标内绘制曲线及其包络线。

程序为:x=(0:pi/100:2*pi)';       

 %产生一个从0到2π的一维数组,单位增量为π/100

y1=2*exp(-0.5*x)*[1,-1];   %对应于x的包络线的函数值

y2=2*exp(-0.5*x).*sin(2*pi*x);  %对应于x的曲线的函数值

x1=(0:12)/2;     %产生一个从0到12的一维数组,单位增量为1/2

y3=2*exp(-0.5*x1).*sin(2*pi*x1);   %对应于x1的曲线的函数值

plot(x,y1,'g:',x,y2,'b--',x1,y3,'rp')   

%以不同的颜色不同线型绘制图形

 

3

1.4 双纵坐标函数plotyy

plotyy函数是MATLAB新增的函数。它能把函数值具有不同量纲、不同数量级的两个函数绘制在同一坐标内。调用格式为: plotyy(x1,y1,x2,y2)

其中x1 - y1对应一条曲线,x2 - y2对应另一条曲线。横坐标的标度相同,纵坐标有2个,左纵坐标用于x1 - y1数据对,右纵坐标用于x2 - y2数据对。

4 用不同标度在同一坐标中绘制曲线和。

程序为: x1=0:pi/100:2*pi;

y1=2*exp(-0.5*x1).*sin(2*pi*x1);

y2=2*sin(x1);

plotyy(x1,y1,x1,y2)

 

 

4

2.绘制图形的辅助操作

绘制完图形后,对图形加一些辅助操作,使图形意义更加明确,是很有必要的。

2.1 图形标注

在绘制图形的同时,可以对图形加上一些说明,如图形名称、坐标轴说明以及图形某一部分的含义等,这些都被称为添加图形标注。有关图形标注函数的调用格式为:

title(图形名称)   用于说明图形名称;  

xlabel(x轴说明)、ylabel(y轴说明) (z轴说明用zlabel)   用于说明坐标轴名称;

text(x,y,图形说明)   在(x,y)坐标处添加图形说明;

legend(图例1,图例2,…)  用于绘制曲线所用线型、颜色或数据点图例,图例放置在图形空白处,用户可以通过鼠标移动图例,将其放在所希望的位置。

另外,添加文本说明也可用gtext命令,执行该命令时,十字坐标光标自动跟随鼠标移动,单击鼠标即可将文本放置在十字光标处。除legend函数外,其他函数同样适用于三维图形。

5  给图3添加图形标注。

程序为:     x1=0:pi/100:2*pi;

y1=2*exp(-0.5*x).*sin(2*pi*x);

y1=2*exp(-0.5*x1).*sin(2*pi*x1);

y2=2*sin(x1);

plotyy(x1,y1,x1,y2)

x=(0:pi/100:2*pi)';

y1=2*exp(-0.5*x)*[1,-1];

y2=2*exp(-0.5*x).*sin(2*pi*x);

x1=(0:12)/2;

y3=2*exp(-0.5*x1).*sin(2*pi*x1);

plot(x,y1,'g:',x,y2,'b--',x1,y3,'rp');

title('曲线及其包络线')

text(2.8,0.5,' 包络线');

text(0.5,0.5,' 曲线y');

text(1.4,0.1,' 离散数据点');

legend('包络线','包络线','曲线y','离散数据点')         

 

5

2.2坐标控制

在绘制图形时,MATLAB可以自动根据要绘制曲线数据的范围选择合适的坐标刻度,使得曲线尽可能清晰地显示出来。所以,在一般情况下用户不必选择坐标轴的刻度范围。但是,如果用户对坐标系不满意,可利用axis函数对其重新设定。该函数的调用格式为:

axis([xmin,xmax,ymin,ymax,zmin,zmax])

如果只给出前4个参数,同MATLAB按照给出的参数选择坐标系范围,以便绘制出合适的二维曲线。如果给出全部参数,则系统按照参数选择坐标系范围,以便绘制出合适的三维图形。

一般情况下,绘图命令每执行一次就刷新当前图形窗口,图形窗口原有图形就不存在了。若希望在已存在的图形上再继续添加新的图形,可使用保持命令hold。hold on/off命令控制是保持原有图形还是刷新原有图形,不带参数的hold命令在两种状态之间进行切换。

给坐标加网格线用grid命令来控制。grid on/off命令控制是画还是不画网格线,不带参数的grid命令在两种状态之间进行切换。

2.3图形窗口的分割

在实际应用中,经常需要在一个图形窗口内绘制若干个独立的图形,这就需要对图形窗口进行分割。分割后的图形窗口由若干个绘图区组成,第一个绘图区可以建立独立的坐标系并绘制图形。同一图形窗口中的不同图形称为子图,MATLAB系统提供了subplot函数,用来将当前窗口分割成若干个绘图区。每一个区域代表一个独立的子图,也是一个独立的坐标系,可以通过subplot函数激活某一区,该区称为活动区,所发出的绘图命令都是作用于活动区域。subplot函数的调用格式为:

subplot(m,n,p)

该函数将当前图形窗口分成m×n个绘图区,即每行n个,共m行,区号按行优先编号,且选定第p个区为当前活动区。在第一个绘图区允许以不同的坐标系单独绘制图形。

6 在一个图形窗口中以子图形式同时绘制正弦、余弦、正切、余切曲线。

程序为:x=linspace(0,2*pi,50);

y=sin(x);z=cos(x);

t=sin(x)./(cos(x)+eps);ct=cos(x)./(sin(x)+eps);

subplot(2,2,1);

plot(x,y);title('sin(x)');axis([0,2*pi,-1,1]);

subplot(2,2,2);

plot(x,z);title('cos(x)');axis([0,2*pi,-1,1]);

subplot(2,2,3);

plot(x,t);title('tan(x)');axis([0,2*pi,-40,40]);

subplot(2,2,4);

plot(x,ct);title('cot(x)');axis([0,2*pi,-40,40]);

输出结果为:

 

6

3.绘制二维图形的其他函数

3.1其他形式的线性直角坐标图

在线性直角坐标系中,其他形式的图形有条形图、阶梯图、杆图和填充图等,所采用的函数分别是:  bar(x,y,选项)、stairs(x,y,选项)、stem(x,y,选项)、fill(x1,y1,选项1, x2,y2,选项2,…)

前三个函数用法与plot函数相似,只是没有多输入变量形式。fill函数按向量元素下标渐增次序依次用直线段连接x,y对应元素定义的数据点。假若这样连接所得折线不封闭,那么MATLAB将自动把该折线的首尾连接起来,构成封闭多边形,然后将多边形内部涂满指定的颜色。

7 分别以条形图、阶梯图、杆图和填充图绘制曲线。

程序为:x=0:0.2:5;

y=2*exp(-1*x);

subplot(2,2,1);bar(x,y,'g');

title('bar(x,y)');axis([0,5,0,2]);

subplot(2,2,2);stairs(x,y,'b');

title('stairs(x,y)');axis([0,5,0,2]);

subplot(2,2,3);stem(x,y,'k');

title('stem(x,y)');axis([0,5,0,2]);

subplot(2,2,4);fill(x,y,'r');

title('fill(x,y)');axis([0,5,0,2]);

输出结果为:

 

                 7

3.2极坐标图

polar函数用来绘制极坐标图,其调用格式为:polar(theta,rho,选项),其中theta为极坐标极角, rho为极坐标矢径,选项内容与plot函数相似。

8  绘制心形线的极坐标图。

程序为:  theta=0:0.02:2*pi;

rho=2*(1+cos(theta));

polar(theta,rho,'r');

输出结果(见图8)。

    3.3对数坐标图形

在实际应用中,经常用到对数坐标,例如控制理论中的Bode图。MATLAB提供了绘制对数和半对数坐标曲线的函数,调用格式为:

semilogx(x1,y1,选项1,x2,y2,选项2,…)  半对数坐标,x轴为常用对数刻度,y轴为线性刻度;

semilogy(x1,y1,选项1,x2,y2,选项2,…) 半对数坐标,x轴为线性刻度,y轴为常用对数刻度;

loglog(x1,y1,选项1,x2,y2,选项2,…)  全对数坐标,x,y轴均采用常用对数刻度。

二、 三维图形

     1.绘制三维曲线的最基本函数

 

 

                       8

最基本的三级图形函数为plot3,它将二维绘图函数plot的有关功能扩展到三维空间,用来绘制三维曲线。plot3函数与plot函数用法十分相似,其调用格式为:

plot3(x1,y1,z1,选项1,x2,y2,z2,选项2,…, xn,yn,zn,选项n)

其中每一组x,y,z组成一组曲线的坐标参数,选项的定义与函数plot相同。当x,y,z是同维向量时,则x,y,z对应元素构成一条三维曲线。当x,y,z是同维矩阵时,则以x,y,z对应列元素绘制三维曲线,曲线条数等于矩阵列数。

9 绘制空间曲线:,曲线所对应的参数方程为:。

程序为:  t=0:pi/100:2*pi;

x=8*cos(t);y=4*sqrt(2)*sin(t);z=-4*sqrt(2)*sin(t);

plot3(x,y,z,'rp');

title('Line in 3-D Space');text(0,0,0,'origin');

xlabel('X');ylabel('Y');zlabel('Z');

输出结果为:

      

                                   9

2.三维曲面

2.1 平面网格坐标矩阵的生成

绘制所代表的三维曲面图,先要在平面选定一矩形区域,假定区域D=,然后将在方向分成份,将在方向分成份,由各划分点分别作平行于两坐标轴的直线,将区域D分成个小矩形,生成代表每一个小矩形顶点坐标的平面网格坐标矩阵,最后利用有关函数绘图。

产生平面区域内的网格坐标矩阵有两种方法:

● 利用矩阵运算生成,命令如下:

 x=a:dx:b;y=c:dy:d;

X=ones(size(y))*x;

Y=y* ones(size(x));

上述语句执行后,矩阵X的每一行都是向量,行数等于向量的元素的个数,矩阵Y的每一行都是向量,列数等于向量的元素的个数。于是X和Y相同位置上的元素恰好是区域D的网格点的坐标。若根据每一个网格点上的坐标求函数值,则得到函数矩阵Z。显然,X,Y,Z各列或各行所对应坐标,对应于一条空间曲线,空间曲线的集合组成空间曲面。

● 利用meshgrid函数生成,命令如下:

x=a:dx:b;y=c:dy:d;

[X,Y]=meshgrid(x,y);

语句执行后,所得到的网格坐标矩阵X,Y与方法(1)得到的相同。当 时,meshgrid函数可写成meshgrid(x)。

10 已知,求不定方程。

程序如下:

x=10:45;y=6:37;

[x,y]=meshgrid(x,y);   % 在[10,45]×[6,37]区域生成网格坐标

z=3*x+5*y;

k=find(z==114);      % 求出解的位置

x(k),y(k)            %输出对应位置的x,y,即方程的解。

输出结果为: ans =

    13    18    23    28

ans =

    15    12     9     6

2.2绘制三维曲面的函数

MATLAB提供了mesh函数和surf函数来绘制三维曲面图。mesh函数用于绘制三维网格图,在不需要绘制特别精细的三维曲面图时,可以通过三维网格图来表示三维曲面。surf函数用于绘制三维曲面图,各线条之间的补面用颜色填充。调用格式为:

mesh(x,y,z,c)、surf(x,y,z,c)。

一般情况下,是维数相同的矩阵。是网格坐标矩阵,是网格点上的高度矩阵,用于指定在不同高度下的颜色范围。省略时,MATLAB认为,亦即颜色的设定是正比于图形的高度的,这样就可以得出层次分明的三维图形。当省略时,把矩阵的列下标当作轴坐标,把矩阵的行下标当作轴坐标,然后绘制三维曲面图。当是向量时,必须要求的长度等于矩阵的列,的长度等于矩阵的行,向量元素的组合构成网格点的坐标,坐标则取自矩阵,然后绘制三维曲面图。

11 用三维曲面图表现函数。

为方便分析各种三维曲面的特征,下面画出3种不同形式的曲面。

程序1:    x=-4:4;y=x;[x,y]=meshgrid(x,y);

            z=x.^2+y.^2;mesh(x,y,z);

xlabel('x-axis'),ylabel('y-axis'),zlabel('z-axis');title('mesh');

输出结果见图10。

程序2:     x=-4:4;y=x;[x,y]=meshgrid(x,y);

z=x.^2+y.^2;surf(x,y,z);

xlabel('x-axis'),ylabel('y-axis'),zlabel('z-axis');title('surf');

输出结果见图11。

程序3:      x=-4:0.1:4;y=x;[x,y]=meshgrid(x,y);

z=x.^2+y.^2;plot3(x,y,z);

xlabel('x-axis'),ylabel('y-axis'),zlabel('z-axis');title('plot3-1');grid


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值