第四节 Matlab中的图形

来源:百度文库 编辑:神马文学网 时间:2024/07/04 19:51:56
§4.1 二维作图
§4.1.1  基本形式
§4.1.2 多重线
§4.1.3 线型和颜色的控制
§4.1.4对数图、极坐标图及条形图
§4.1.5 子图
§4.1.6 填充图
§4.2 三维作图
§4.2.1 mesh(Z)语句
§4.2.2与mesh相关的几个函数
§4.2.3 其它的几个三维绘图函数
§4.2.4图形的控制与修饰
§4.3 统计回归图
二维作图
绘图命令plot绘制x-y坐标图;loglog命令绘制对数坐标图;semilogx和semilogy命令绘制半对数坐标图;polor命令绘制极坐标图.
基本形式
如果y是一个向量,那么plot(y)绘制一个y中元素的线性图.假设我们希望画出
y=[0.,  0.48,  0.84,  1.,  0.91,  6.14 ]
则用命令:plot(y)
它相当于命令:plot(x, y),其中x=[1,2,…,n]或x=[1;2;…;n],即向量y的下标编号, n为向量y的长度
Matlab会产生一个图形窗口,显示如下图形,请注意:坐标x和y 是由计算机自动绘出的.
图4.1.1.1 plot([0.,0.48,0.84,1.,0.91,6.14])
上面的图形没有加上x轴和y轴的标注,也没有标题.用xlabel,ylabel,title命令可以加上.
如果x,y是同样长度的向量,plot(x,y)命令可画出相应的x元素与y元素的x-y坐标图.例:
x=0:0.05:4*pi;  y=sin(x);  plot(x,y)
grid on, title(' y=sin( x ) 曲线图' )
xlabel(' x = 0 : 0.05 : 4Pi ')
结果见下图.
图4.1.1.2 y=sin(x)的图形
title
图形标题
xlabel
x坐标轴标注
ylabel
y坐标轴标注
text
标注数据点
grid
给图形加上网格
hold
保持图形窗口的图形
表4.1.1.1 Matlab图形命令

多重线
在一个单线图上,绘制多重线有三种办法.
第一种方法是利用plot的多变量方式绘制:
plot(x1,y1,x2,y2,...,xn,yn)
x1,y1,x2,y2,...,xn,yn是成对的向量,每一对x, y在图上产生如上方式的单线.多变量方式绘图是允许不同长度的向量显示在同一图形上.
第二种方法也是利用plot绘制,但加上hold on/off命令的配合:
plot(x1,y1)
hold on
plot(x2,y2)
hold off
第三种方法还是利用plot绘制,但代入矩阵:
如果plot用于两个变量plot(x,y),并且x,y是矩阵,则有以下情况:
(1)如果y是矩阵,x是向量,plot(x,y)用不同的画线形式绘出y的行或列及相应的x向量,y的行或列的方向与x向量元素的值选择是相同的.
(2)如果x是矩阵,y是向量,则除了x向量的线族及相应的y向量外,以上的规则也适用.
(3)如果x,y是同样大小的矩阵,plot(x,y)绘制x的列及y相应的列.
还有其它一些情况,请参见Matlab的帮助系统.
线型和颜色的控制
如果不指定划线方式和颜色,Matlab会自动为您选择点的表示方式及颜色.您也可以用不同的符号指定不同的曲线绘制方式.例如:
plot(x,y,'*')                    用'*'作为点绘制的图形.
plot(x1,y1,':',x2,y2,'+')    用':'画第一条线,用'+'画第二条线.
线型、点标记和颜色的取值有以下几种:
线型
点标记
颜色
-
实线
.

y

:
虚线
o
小圆圈
m
棕色
-.
点划线
x
叉子符
c
青色
--
间断线
+
加号
r
红色
*
星号
g
绿色
s
方格
b
蓝色
d
菱形
w
白色
^
朝上三角
k
黑色
v
朝下三角
>
朝右三角
<
朝左三角
p
五角星
h
六角星
表4.1.3.1线型和颜色控制符
如果你的计算机系统不支持彩色显示,Matlab将把颜色符号解释为线型符号,用不同的线型表示不同的颜色.颜色与线型也可以一起给出,即同时指定曲线的颜色和线型.
例如:     t=-3.14:0.2:3.14;
x=sin(t);  y=cos(t);
plot(t,x, '+r',t,y, '-b')
图4.1.3.1不同线型、颜色的sin,cos图形

对数图、极坐标图及条形图
loglog、semilogx、semilogy和polar的用法和plot相似.这些命令允许数据在不同的graph paper上绘制,例如不同的坐标系统.先介绍的fplot是扩展来的可用于符号作图的函数.
l  fplot(fname,lims) 绘制fname指定的函数的图形.
l  polar( theta, rho) 使用相角theta 为极坐标形式绘图,相应半径为rho,其次可使用grid命令画出极坐标网格.
l  loglog  用log10-log10标度绘图.
l  semilogx 用半对数坐标绘图,x轴是log10,y是线性的.
l  semilogy 用半对数坐标绘图,y轴是log10,x是线性的.
l  bar(x) 显示x向量元素的条形图,bar不接受多变量.
l  hist 绘制统计频率直方图.
l  histfit(data,nbins) 绘制统计直方图与其正态分布拟合曲线.
fplot函数的绘制区域为lims=[xmin,xmax],也可以用lims=[xmin,xmax,ymin,ymax]指定y轴的区域.函数表达式可以是一个函数名,如sin,tan等;也可以是带上参数x的函数表达式,如sin(x),diric(x,10);也可以是一个用方括号括起的函数组,如[sin, cos].
例1:fplot('sin',[0 4*pi])
例2:fplot('sin(1 ./ x)', [0.01 0.1])
例3:fplot('abs(exp(-j*x*(0:9))*ones(10,1))',[0 2*pi],'-o')
例4:fplot('[sin(x), cos(x) , tan(x)]',[-2*pi 2*pi -2*pi 2*pi])   %%(图4.1.4.1)
图4.1.4.1 sin,cos,tan函数图形                                 图4.1.4.2半对数图
下面介绍的是其它几个作图函数的应用.
例5:半对数坐标绘图
t=0.001:0.002:20;
y=5 + log(t) + t;
semilogx(t,y, 'b')
hold on
semilogx(t,t+5, 'r')   %% (图4.1.4.2)
例6:极坐标绘图
t=0:0.01:2*pi;
polar(t,sin(6*t))   %% (图4.1.4.3)
图4.1.4.3 极坐标绘图         图4.1.4.4正态分布的统计直方图与其正态分布拟合曲线
例7:正态分布图
我们可以用命令normrnd生成符合正态分布的随机数.
normrnd(u,v,m,n)
其中,u表示生成随机数的期望,v代表随机数的方差.
运行:
a=normrnd(10,2,10000,1);
histfit(a)   %% (图4.1.4.4)
我们可以得到正态分布的统计直方图与其正态分布拟合曲线.
例8:比较正态分布(图4.1.4.5(1))与平均分布(图4.1.4.5(2))的分布图:
yn=randn(30000,1);    %% 正态分布
x=min(yn) : 0.2 : max(yn);
subplot(121)
hist(yn, x)
yu=rand(30000,1);     %% 平均分布
subplot(122)
hist(yu, 25)
4.1.4.5(1)                          4.1.4.5(2)
图4.1.4.5 正态分布与平均分布的分布图

在绘图过程中,经常要把几个图形在同一个图形窗口中表现出来,而不是简单地叠加(例如上面的例8).这就用到函数subplot.其调用格式如下:
subplot(m,n,p)
subplot函数把一个图形窗口分割成m×n个子区域,用户可以通过参数p调用个各子绘图区域进行操作.子绘图区域的编号为按行从左至右编号.
例9:绘制子图
x=0:0.1*pi:2*pi;
subplot(2,2,1)
plot(x,sin(x),'-*');
title('sin(x)');
subplot(2,2,2)
plot(x,cos(x),'--o');
title('cos(x)');
subplot(2,2,3)
plot(x,sin(2*x),'-.*');
title('sin(2x)');
subplot(2,2,4);
plot(x,cos(3*x),':d')
title('cos(3x)')
得到图形如下:
图4.1.5.1子图

利用二维绘图函数patch,我们可绘制填充图.绘制填充图的另一个函数为fill.
下面的例子绘出了函数humps(一个Matlab演示函数)在指定区域内的函数图形.
例10:用函数patch绘制填充图
fplot('humps',[0,2],'b')
hold on
patch([0.5 0.5:0.02:1 1],[0 humps(0.5:0.02:1) 0],'r');
hold off
title('A region under an interesting function.')
grid
图4.1.6.1填充图
我们还可以用函数fill来绘制类似的填充图.
例11:用函数fill绘制填充图
x=0:pi/60:2*pi;
y=sin(x);
x1=0:pi/60:1;
y1=sin(x1);
plot(x,y,'r');
hold on
fill([x1 1],[y1 0],'g')
图4.1.6.2填充图

三维作图
mesh(Z)语句可以给出矩阵Z元素的三维消隐图,网络表面由Z坐标点定义,与前面叙述的x-y平面的线格相同,图形由邻近的点连接而成.它可用来显示用其它方式难以输出的包含大量数据的大型矩阵,也可用来绘制Z变量函数.
显示两变量的函数Z=f(x,y),第一步需产生特定的行和列的x-y矩阵.然后计算函数在各网格点上的值.最后用mesh函数输出.
下面我们绘制sin(r)/r函数的图形.建立图形用以下方法:
x=-8:.5:8;
y=x';
x=ones(size(y))*x;
y=y*ones(size(y))';
R=sqrt(x.^2+y.^2)+eps;
z=sin(R)./R;
mesh(z)       %%  试运行 mesh(x,y,z),看看与mesh(z)有什么不同之处?
各语句的意义是:首先建立行向量x,列向量y;然后按向量的长度建立1-矩阵;用向量乘以产生的1-矩阵,生成网格矩阵,它们的值对应于x-y坐标平面;接下来计算各网格点的半径;最后计算函数值矩阵Z.用mesh函数即可以得到图形.
图4.2.1三维消隐图
第一条语句x的赋值为定义域,在其上估计函数;第三条语句建立一个重复行的x矩阵,第四条语句产生y的响应,第五条语句产生矩阵R(其元素为各网格点到原点的距离).用mesh方法结果如上.
另外,上述命令系列中的前4行可用以下一条命令替代:
[x, y]=meshgrid(-8:0.5:8)

(1) meshc与函数mesh的调用方式相同,只是该函数在mesh的基础上又增加了绘制相应等高线的功能.下面来看一个meshc的例子:
[x,y]=meshgrid([-4:.5:4]);
z=sqrt(x.^2+y.^2);
meshc(z)       %%  试运行 meshc(x,y,z),看看与meshc(z)有什么不同之处?
我们可以得到图形:
图4.2.2.1  meshc 图
地面上的圆圈就是上面图形的等高线.
(2) 函数meshz与mesh的调用方式也相同,不同的是该函数在mesh函数的作用之上增加了屏蔽作用,即增加了边界面屏蔽.例如:
[x,y]=meshgrid([-4:.5:4]);
z=sqrt(x.^2+y.^2);
meshz(z)       %%  试运行 meshz(x,y,z),看看与meshz(z)有什么不同之处?
我们得到图形:
图4.2.2.2  meshz 图

(1) 在Matlab中有一个专门绘制圆球体的函数sphere,其调用格式如下:
[x,y,z]=sphere(n)
此函数生成三个(n+1)×(n+1)阶的矩阵,再利用函数surf(x,y,z)可生成单位球面.
[x,y,z]=sphere   此形式使用了默认值n=20
sphere(n)   只绘制球面图,不返回值.
运行下面程序:
sphere(30);
axis square;
我们得到球体图形:
图4.2.3.1  球面图
若只输入sphere画图,则是默认了n=20的情况.
(2) surf函数也是Matlab中常用的三维绘图函数.其调用格式如下:
surf(x,y,z,c)
输入参数的设置与mesh相同,不同的是mesh函数绘制的是一网格图,而surf绘制的是着色的三维表面.Matlab语言对表面进行着色的方法是,在得到相应网格后,对每一网格依据该网格所代表的节点的色值(由变量c控制),来定义这一网格的颜色.若不输入c,则默认为c=z.
我们看下面的例子:
%绘制地球表面的气温分布示意图.
[a,b,c]=sphere(40);
t=abs(c);    %求绝对值
surf(a,b,c,t);
axis equal
colormap('hot')
我们可以得到图形如下:
图4.2.3.2  等温线示意图

(1) 坐标轴的控制函数axis,调用格式如下:
axis([xmin,xmax,ymin,ymax,zmin,zmax])
用此命令可以控制坐标轴的范围.
与axis相关的几条常用命令还有:
axis auto                自动模式,使得图形的坐标范围满足图中一切图元素
axis equal                     严格控制各坐标的分度使其相等
axis square             使绘图区为正方形
axis on                  恢复对坐标轴的一切设置
axis off                 取消对坐标轴的一切设置
axis manual           以当前的坐标限制图形的绘制
(2)grid on  在图形中绘制坐标网格.
grid off  取消坐标网格.
(3)xlabel, ylabel, zlabel分别为x轴, y轴, z轴添加标注.title为图形添加标题.
以上函数的调用格式大同小异,我们以xlabel为例进行介绍:
xlabel('标注文本','属性1','属性值1','属性2','属性值2',…)
这里的属性是标注文本的属性,包括字体大小、字体名、字体粗细等.
例如:
[x, y]=meshgrid(-4:.2:4);
R=sqrt(x.^2+y.^2);
z=-cos(R);
mesh(x,y,z)
xlabel('x\in[-4,4]','fontweight','bold');
ylabel('y\in[-4,4]','fontweight','bold');
zlabel('z=-cos(sqrt(x^2+y^2))','fontweight','bold');
title('旋转曲面','fontsize',15,'fontweight','bold','fontname','隶书');
图4.2.4.1 添加标注
以上各种绘图方法的详细用法,请看联机信息.
对平面上n个点:
在平面直线族{ 为实数}中寻求一条直线 ,使得散点到与散点相对应的在直线上的点之间的纵坐标的误差的平方和最小,用微积分的方法可得:
所求得的这条直线: 称为回归直线.
例:已知如下点列,求其回归直线,并计算最小误差平方和.
x
0.1
0.11
.12
.13
.14
.15
.16
.17
.18
.2
.21
.23
y
42
43.5
45
45.5
45
47.5
49
53
50
55
55
60
参考的程序如下:
x=[0.1 0.11 .12 .13 .14 .15 .16 .17 .18 .2 .21 .23];
y=[42 43.5 45 45.5 45 47.5 49 53 50 55 55 60];
n=length(x);
xb=mean(x);
yb=mean(y);
x2b=sum(x.^2)/n;
xyb=x*y'/n;
b=(xb*yb-xyb)/(xb^2-x2b);
a=yb-b*xb;
y1=a+b.*x;
plot(x,y,'*',x,y1);
serror=sum((y-y1).^2)
图4.3.1回归直线