MATLAB 绘图基础

  

matlab中如何在指定一点画一个填充颜色的小圆

plot(1,1,'r.','markersize',50) 

§4.1 二维作图

绘图命令plot绘制x-y坐标图;loglog命令绘制对数坐标图;semilogxsemilogy命令绘制半对数坐标图;polar命令绘制极坐标图.

§4.1.1基本形式

如果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会产生一个图形窗口,显示如下图形,请注意:坐标xy是由计算机自动绘出的.

MATLAB中的图形 - lxg_1123@126 - lxg_1123@126的博客

4.1.1.1 plot([0.,0.48,0.84,1.,0.91,6.14])

 

上面的图形没有加上x轴和y轴的标注,也没有标题.用xlabelylabeltitle命令可以加上.

如果xy是同样长度的向量,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 ')

结果见下图.

MATLAB中的图形 - lxg_1123@126 - lxg_1123@126的博客

4.1.1.2 y=sin(x)的图形

 

title

图形标题

xlabel

x坐标轴标注

ylabel

y坐标轴标注

text

标注数据点

grid

给图形加上网格

hold

保持图形窗口的图形

 

4.1.1.1 Matlab图形命令    


§4.1.2多重线

在一个单线图上,绘制多重线有三种办法.

第一种方法是利用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),并且xy是矩阵,则有以下情况:

1)如果y是矩阵,x是向量,plot(x,y)用不同的画线形式绘出y的行或列及相应的x向量,y的行或列的方向与x向量元素的值选择是相同的.

2)如果x是矩阵,y是向量,则除了x向量的线族及相应的y向量外,以上的规则也适用.

3)如果xy是同样大小的矩阵,plot(x,y)绘制x的列及y相应的列.

还有其它一些情况,请参见Matlab的帮助系统.

§4.1.3线型和颜色的控制

如果不指定划线方式和颜色,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')

MATLAB中的图形 - lxg_1123@126 - lxg_1123@126的博客

4.1.3.1不同线型、颜色的sin,cos图形


 

§4.1.4对数图、极坐标图及条形图

 

loglogsemilogxsemilogypolar的用法和plot相似.这些命令允许数据在不同的graph paper上绘制,例如不同的坐标系统.先介绍的fplot是扩展来的可用于符号作图的函数.

 

l fplot(fname,lims) 绘制fname指定的函数的图形.

l polar( theta, rho) 使用相角theta为极坐标形式绘图,相应半径为rho,其次可使用grid命令画出极坐标网格.

l loglog  log10-log10标度绘图.

l semilogx 用半对数坐标绘图,x轴是log10y是线性的.

l semilogy 用半对数坐标绘图,y轴是log10x是线性的.

l bar(x) 显示x向量元素的条形图,bar不接受多变量.

l hist 绘制统计频率直方图.

l histfit(data,nbins) 绘制统计直方图与其正态分布拟合曲线.

 

fplot函数的绘制区域为lims=[xmin,xmax],也可以用lims=[xmin,xmax,ymin,ymax]指定y轴的区域.函数表达式可以是一个函数名,如sintan等;也可以是带上参数x的函数表达式,如sin(x)diric(x,10);也可以是一个用方括号括起的函数组,如[sin, cos]

1fplot('sin',[0 4*pi])

2fplot('sin(1 ./ x)', [0.01 0.1])

3fplot('abs(exp(-j*x*(0:9))*ones(10,1))',[0 2*pi],'-o')

4fplot('[sin(x), cos(x) , tan(x)]',[-2*pi 2*pi -2*pi 2*pi])   %%(4.1.4.1)

 

MATLAB中的图形 - lxg_1123@126 - lxg_1123@126的博客MATLAB中的图形 - lxg_1123@126 - lxg_1123@126的博客

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)

MATLAB中的图形 - lxg_1123@126 - lxg_1123@126的博客    MATLAB中的图形 - lxg_1123@126 - lxg_1123@126的博客

            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.51))与平均分布(图4.1.4.52))的分布图:

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)

MATLAB中的图形 - lxg_1123@126 - lxg_1123@126的博客

4.1.4.5(1)                          4.1.4.5(2)

 

4.1.4.5正态分布与平均分布的分布图


§4.1.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)')

得到图形如下:

MATLAB中的图形 - lxg_1123@126 - lxg_1123@126的博客

4.1.5.1子图


§4.1.6填充图

利用二维绘图函数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

MATLAB中的图形 - lxg_1123@126 - lxg_1123@126的博客

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')

MATLAB中的图形 - lxg_1123@126 - lxg_1123@126的博客

4.1.6.2填充图


§4.2三维作图

§4.2.1 mesh(Z)语句

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函数即可以得到图形.

MATLAB中的图形 - lxg_1123@126 - lxg_1123@126的博客

4.2.1三维消隐图

第一条语句x的赋值为定义域,在其上估计函数;第三条语句建立一个重复行的x矩阵,第四条语句产生y的响应,第五条语句产生矩阵R(其元素为各网格点到原点的距离).用mesh方法结果如上.

另外,上述命令系列中的前4行可用以下一条命令替代:

[x, y]=meshgrid(-8:0.5:8)


§4.2.2mesh相关的几个函数

(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)有什么不同之处?

我们可以得到图形:

MATLAB中的图形 - lxg_1123@126 - lxg_1123@126的博客

4.2.2.1 meshc

 

地面上的圆圈就是上面图形的等高线.

(2) 函数meshzmesh的调用方式也相同,不同的是该函数在mesh函数的作用之上增加了屏蔽作用,即增加了边界面屏蔽.例如:

[x,y]=meshgrid([-4:.5:4]);

z=sqrt(x.^2+y.^2);

meshz(z)       %% 试运行 meshz(x,y,z),看看与meshz(z)有什么不同之处?

我们得到图形:

MATLAB中的图形 - lxg_1123@126 - lxg_1123@126的博客

4.2.2.2 meshz


 

§4.2.3其它的几个三维绘图函数

(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;

我们得到球体图形:

MATLAB中的图形 - lxg_1123@126 - lxg_1123@126的博客

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')

我们可以得到图形如下:

MATLAB中的图形 - lxg_1123@126 - lxg_1123@126的博客

4.2.3.2 等温线示意图

 

 

§4.2.4图形的控制与修饰

(1)坐标轴的控制函数axis,调用格式如下:

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

用此命令可以控制坐标轴的范围.

axis相关的几条常用命令还有:

axis auto               自动模式,使得图形的坐标范围满足图中一切图元素

axis equal                    严格控制各坐标的分度使其相等

axis square            使绘图区为正方形

axis on                 恢复对坐标轴的一切设置

axis off                取消对坐标轴的一切设置

axis manual          以当前的坐标限制图形的绘制

 

2grid on 在图形中绘制坐标网格.

grid off 取消坐标网格.

 

3xlabel, 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','隶书');

 

MATLAB中的图形 - lxg_1123@126 - lxg_1123@126的博客

 

4.2.4.1添加标注

 

以上各种绘图方法的详细用法,请看联机信息.

§4.3统计回归图

对平面上n个点:MATLAB中的图形 - lxg_1123@126 - lxg_1123@126的博客

在平面直线族{MATLAB中的图形 - lxg_1123@126 - lxg_1123@126的博客为实数}中寻求一条直线MATLAB中的图形 - lxg_1123@126 - lxg_1123@126的博客,使得散点到与散点相对应的在直线上的点之间的纵坐标的误差的平方和最小,用微积分的方法可得:

MATLAB中的图形 - lxg_1123@126 - lxg_1123@126的博客

MATLAB中的图形 - lxg_1123@126 - lxg_1123@126的博客

 

所求得的这条直线:MATLAB中的图形 - lxg_1123@126 - lxg_1123@126的博客称为回归直线.

例:已知如下点列,求其回归直线,并计算最小误差平方和.

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)

 

MATLAB中的图形 - lxg_1123@126 - lxg_1123@126的博客
阅读更多
个人分类: MATLAB统计学
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭