第五章 MATLAB绘图
教学目标
1、熟练掌握MATLAB摄影大赛获奖作品二维图形的绘制
2、了解隐函数绘图
3、熟练掌握三维图形绘制
4、熟练掌握各种特殊图形的绘制
5.1 二维曲线图
5.1.1 图形窗口简介
MATLAB一向注重数据的图形表示,所有的图形窗口的开发使用都是为了让用户通过更为直观的方法直接体会数据间的含义
1、figure及相关指令
在MATLAB术语中,有一个显示图形窗口叫做“figure”,不同的figure命令可以用其句柄(handle)加以区分。不带参数的figure命令用来产生一个新的figure窗口,返回其句柄。也可以带一个整型参数:figure(H),表示打开一个新的figure窗口并且其句柄为H。如果举兵为H的figure窗口已经存在,则此命令将它变为可见,即置于其他所有子窗口的上面,并且把它变成“当前”的figure,在这里,“当前”的含义是:以后的图形操作如果不指明figure句柄,则都是针对这个figure进行的。
2、subplot及其相关指令
MATLAB可以将窗口区域分成若干个小的窗口,每一个窗口相当于一个figure,在小窗口中可以像在整个窗口中一样进行图形的绘制工作。完成这个工作的命令是subplot。
命令subplot(m,n,i)把图形窗口分成m×n个小图形区域,并指定第i个为图形的绘制区域。和矩阵不同,图形区域的编排采用行优先的原则。
5.1.2 plot指令绘图
1、绘制一条二维曲线
MATLAB中最常用的就是plot指令,其具体调用格式为
plot(x) %绘制以x为纵坐标的二维曲线
plot(x,y) %绘制以x为横坐标y为纵坐标的二维曲线
说明:x和y可以是向量或矩阵。
例:用plot(x)命令画直线。
x1=[1 2 3]
x1 =
1 2 3
plot(x1)
x2=[0 1 0]
x2 =
0 1 0
plot(x2)
例 在0≤x≤2区间内,绘制曲线
y=2e-0.5xcos(4πx)
程序如下:
x=0:pi/100:2*pi;
y=2*exp(-0.5*x).*cos(4*pi*x);
plot(x,y)
例 绘制曲线
程序如下:
t=0:0.1:2*pi;
x=t.*sin(3*t);
座谈会主持词y=t.*sin(t).*sin(t);
plot(x,y);
2、绘制多条二维曲线
例 矩阵图形的绘制,如下图所示。
x1=[1 2 3;4 5 6];
plot(x1);
x2=peaks; %产生一个49*49的矩阵
plot(x2);
3、plot(x,y)绘制混合式曲线
当plot(x,y)命令中的参数x和y是向量或矩阵时,分别有以下几种情况:
▪ 如果x是向量,而y是矩阵,则x的长度与矩阵y的行数或列数必须相等,如果x的长度与y的行数相等,则向量x与矩阵y的每列向量对应画一条曲线;如果x的长度与y的列数相等,向量x与y的每行向量画一条曲线,如果y是方阵,则x和y的行数和列数都相等,将向量x与矩阵y的每列向量画一条曲线;
▪ 如果x是矩阵,而y是向量,则y的长度必须等于x的行数或列数,绘制的方法与前一种相似;
▪ 如果x和y都是矩阵,则大小必须相同,矩阵x的每列和y的每列画一条曲线。
例 混合式图形的绘制
x1=[1 2 3];
y1=[1 2 3;4 5 6]
y1 =
1 2 3
4 5 6
plot(x1,y1) %每行一条曲线
y2=[1 2 ;3 4; 5 6]
y2 =
1 2
3 4
5 6
plot(x1,y2) %每列一条曲线
plot(y1,x1)
plot(y2,x1)
x2=[1 1 1;2 2 2]
忧的成语
4、曲线的线型、颜色和数据点形
plot命令还可以设置曲线的线段类型、颜色和数据点形等,如下表所示
颜色 | 数据点间连线 | 数据点形 |
类型 | 符号 | 类型 | 符号 | 类型 | 符号 |
黄色 品红色(紫色) 青色 红色 绿色 蓝色 白色 黑色 | y(Yellow) m(Magenta) c(Cyan) r(Red) g(Green) b(Blue) w(White) k(Black) | 实线(默认) 点线 点划线 虚线 | - : -. -- | 实点标记 圆圈标记 叉号形× 十字形+ 星号标记* 方块标记□ 钻石形标记◇ 向下的三角形标记 向上的三角形标记 向左的三角形标记 向右的三角形标记 五角星标记☆ 六连形标记 | . o x六寸戚风蛋糕 + * s d v ^ < > p h |
| | | | | |
语法:
plot(x,y,s)
说明:x为横坐标矩阵,y为纵坐标矩阵,s为类型说明字符串参数;s字符串可以是线段类型、颜色和数据点形三种类型的符号之一,也可以是三种类型符号的组合。
5.1.2 特殊二维图形
在各种专业上常常碰到一些场合,需要把数据以分类的形式显示出来,例如:按月份组织年度销售收入、在信号处理需要绘制时间信号的波形、气象工作者需要显示若干地区的平均气温数据等。为了满足这些特殊要求而需要采用特殊的平面图形。实际工作中人们习惯用直方图、条形图、扁形图等表达这些数据,MATLAB为此设计了一些专门用于绘制这些特殊平面图形的函数,使得这些工作变得非常简单。
1、条形图
条形图常用于统计数据的作图,绘制条形图的函数有以下几种。
bar 竖直条形图
barth 水平条形图
bar3 三维竖直条形图
bar3th 三维水平条形图
这些函数的调用方法类似,下面以bar为例进行介绍
bar(X,Y)
X为横坐标向量,Y可以使向量或者矩阵。Y是向量时,每个元素对应于一个竖条,Y是m行n列的矩阵时,将画出m组竖条,每组包含n个条
bar(Y)
横坐标使用默认值1:1:m
bar(X,Y,width)
用width指定竖条的宽度,默认宽度为0.8。如果宽度大于1,那么条和条之间将重合。
例 假想某城市一年12月份的平均气温数据,划出其条形图
>> x=1:12;
>> y=[-12 -6 4 11 23 26 36 30 21 17 10 3];
>> bar(x,y)
怎么建微信号工程中大量用到的数据都是和一个误差估计联系在一起的,MATLAB中可以以一种直观的方式显示这种带有误差的数据。函数errorbar用来绘制误差条形图,其调用方式如下。
errorbar(x,y,e) 绘制带有误差e的数据y,这里误差是中心对称的,即y的误差是以[y-e,y+e]的形式给出的。
errorbar(x,y,i,u) 误差不是中心对称的,而是以[y-i,y+u]的形式给出的。x,y,i,u必须是相同长度的向量,如果是矩阵,则这个矩阵的每一列将在图中产生一条单独的图线。
errorbar(...,LINESPEC) 可以用LINESPEC参数指定line对象的线型和颜色等。
例 误差条形图示例
>> x=-3:0.2:3;
>> y=erf(x);
>> e=rand(size(x))/10;
>> errorbar(x,y,e)
>> grid on
说明:这里我们采用了gauss误差函数erf,rand函数产生随机误差时用的。
2、直方图
直方图和条形图的形状相似,但作用不同,它主要用于显示数据的分布规律。
用于建立直方图的函数有hist和ro,其中函数hist在直角坐标系中建立直方图,函数ro在极坐标中建立直方图。hist函数y用于对数据的分布情况进行分析,并绘制直方图,其调用方式如下:
N=hist(y) 使用10个等距离分布的区间来对向量y的分布进行统计,并返回每个区间上含有y中元素的个数。
N=hist(y,m) 使用m个区间进行估计
ro的用法和hist的用法相似,只是把数据作为弧度值处理,在极坐标系中建立直方图。
例 直方图绘制
>> Y=rand(15000,2);
>> hist(Y)
>> Y=rand(15000,1);
>> hist(Y,30)
输出结果如下图所示
>> wdir=[45 90 90 45 360 335 360 270 335 270 335 335];
>> wdir=wdir*pi/180;
>> ro(wdir)
输出结果如下图所示
stem函数是对统计数据的另外一种显示方式,和直方图和条形图相比,它的显示特点是在每个垂直条对应的位置上画一个末端带有圆圈数据标记的线段。数据的这种显示方式是信号处理中常常采用的表示方式,其调用方式如下。
stem(…,’filled’) 产生带有实心数据标记的茎状图。
stem(…,LINESPEC) 使用LINESPEC指定的线型、颜色来绘制茎状图
例 二维茎状图绘制实例
>> x=[1:12];
>> y=[342 200 87 912 1342 132 790 823 760 320 290 340];
>> stem(x,y);
5.1.3 设置坐标轴和文字控制
1、坐标轴控制
用坐标控制命令axis来控制坐标轴的特性,下表列出了其常用控制命令
命令 | 含义 | 命令 | 含义 |
axis auto | 使用默认设置 | axis equal | 纵、横轴采用等长刻度 |
axis manual | 使当前坐标范围不变 | axis fill | 在manual方式下起作用,使坐标充满整个绘图区 |
axis off | 取消轴背景 | 大葱怎么种axis image | 纵、横轴采用等长刻度,且坐标框紧贴数据范围 |
axis on | 使用轴背景 | axis normal | 默认矩形坐标系 |
axis ij | 矩阵式坐标,原点在左上方 | axis square | 产生正方形坐标系 |
axis xy | 普通直角坐标,原点在左下方 | axis tight | 把数据范围直接设为坐标范围 |
退休教师axis([xmin,xmax,ymin,ymax]) | 设定坐标范围,必须满足xmin<xmax,ymin<ymax,可以取inf或-inf。 | axis vis3d | 保持高宽比不变,用于三维旋转时避免图形大小变化 |
| 刘文正 | | |
2、网格线和坐标框
(1) 使用grid命令显示分格线