分享

6、MATLAB图形功能

 陆潇潇 2016-10-27

MATLAB有很强的图形功能,可以方便地实现数据的视觉化。强大的计算功能与图形功能相结合为MATLAB在科学技术和教学方面的应用提供了更加广阔的天地。下面着重介绍二维图形的画法,对三维图形只作简单叙述。

 6.1  二维图形的绘制

6.1.1 基本形式

二维图形的绘制是MATLAB语言图形处理的基础,MATLAB最常用的画二维图形的命令是plot,看两个简单的例子: 

 >> y=[0  0.58  0.70  0.95  0.83  0.25];

>> plot(y)

生成的图形是以序号 为横坐标、数组y的数值为纵坐标画出的折线。

>> x=linspace(0,2*pi,30);     % 生成一组线性等距的数值

>> y=sin(x); 

>> plot(x,y)

生成的图形是 上30个点连成的光滑的正弦曲线。

6.1.2 多重线

在同一个画面上可以画许多条曲线,只需多给出几个数组,例如

>> x=0:pi/15:2*pi;

>> y1=sin(x);

>> y2=cos(x);

>> plot(x,y1,x,y2)

则可以画出图5-3。多重线的另一种画法是利用hold命令。在已经画好的图形上,若设置hold on,MATLA将把新的plot命令产生的图形画在原来的图形上。而命令hold off 将结束这个过程。例如:

>> x=linspace(0,2*pi,30);  y=sin(x);  plot(x,y)

先画好图5-2,然后用下述命令增加cos(x)的图形,也可得到图5-3。

>> hold on

>> z=cos(x);  plot(x,z)

>> hold off

 6.1.3 线型和颜色

MATLAB对曲线的线型和颜色有许多选择,标注的方法是在每一对数组后加一个字符串参数,说明如下:

线型   线方式:  - 实线   :点线    -. 虚点线     - - 波折线。

线型   点方式:  . 圆点   +加号    * 星号     x  x形    o 小圆

颜色:   y黄; r红; g绿;  b蓝;  w白;  k黑;  m紫; c青.

以下面的例子说明用法:

>> x=0:pi/15:2*pi; 

>> y1=sin(x);  y2=cos(x); 

>> plot(x,y1,’b:+’,x,y2,’g-.*’)

6.1.4 网格和标记

在一个图形上可以加网格、标题、x轴标记、y轴标记,用下列命令完成这些工作。

>> x=linspace(0,2*pi,30);  y=sin(x);  z=cos(x);

>> plot(x,y,x,z)

>> grid

>> xlabel('Independent Variable X’)

>> ylabel('Dependent Variables Y and Z’)

>> title('Sine and Cosine Curves’)

也可以在图形的任何位置加上一个字符串,如用:

>> text(2.5,0.7,’sinx’)

表示在坐标x=2.5, y=0.7处加上字符串sinx。更方便的是用鼠标来确定字符串的位置,方法是输入命令:

         >> gtext('sinx’)

在图形窗口十字线的交点是字符串的位置,用鼠标点一下就可以将字符串放在那里。

6.1.5 坐标系的控制

在缺省情况下MATLAB自动选择图形的横、纵坐标的比例,如果你对这个比例不满意,可以用axis命令控制,常用的有:

axis([xmin xmax ymin ymax])   [  ]中分别给出x轴和y轴的最大值、最小值

axis equal  或  axis('equal’)      x轴和y轴的单位长度相同

axis square  或  axis('square’)     图框呈方形

axis off  或  axis('off’)          清除坐标刻度

还有axis auto   axis image    axis xy   axis ij   axis normal   axis on   axis(axis)

用法可参考在线帮助系统。

6.1.6 多幅图形

可以在同一个画面上建立几个坐标系, 用subplot(m,n,p)命令;把一个画面分成m×n个图形区域, p代表当前的区域号,在每个区域中分别画一个图,如

>> x=linspace(0,2*pi,30);   y=sin(x);  z=cos(x);

>> u=2*sin(x).*cos(x);  v=sin(x)./cos(x);

>> subplot(2,2,1),plot(x,y),axis([0 2*pi –1 1]),title('sin(x)’)

>> subplot(2,2,2),plot(x,z),axis([0 2*pi –1 1]),title('cos(x)’)

>> subplot(2,2,3),plot(x,u),axis([0 2*pi –1 1]),title('2sin(x)cos(x)’)

>> subplot(2,2,4),plot(x,v),axis([0 2*pi –20 20]),title('sin(x)/cos(x)’)

6.2  三维图形

限于篇幅这里只对几种常用的命令通过例子作简单介绍.

6.2.1   带网格的曲面

例  作曲面z=f(x,y)的图形

用以下程序实现:

>> x=-7.5:0.5;7.5;

>> y=x;

>> [X,Y]=meshgrid(x,y);      (3维图形的X,Y数组)

>> R=sqrt(X.^2+Y.^2)+eps;    (加eps是防止出现0/0)

>> Z=sin(R)./R;

>> mesh(X,Y,Z)              (3维网格表面)

画出的图形如图5-7. mesh命令也可以改为surf, 只是图形效果有所不同,读者可以上机查看结果。

6.2.2   空间曲线

例   作螺旋线 x=sint, y=cost, z=t

用以下程序实现:

>> t=0:pi/50:10*pi;

>> plot3(sin(t),cos(t),t)    (空间曲线作图函数, 用法类似于plot)

画出的图形如图5-8

6.2.3   等高线

用contour 或 contour3 画曲面的等高线,如对图5-7的曲面, 在上面的程序后接

contour(X,Y,Z,10) 即可得到10条等高线。

6.2.4  其它

较有用的是给三维图形指定观察点的命令view(azi,ele),azi 是方位角, ele 是仰角.缺省时 azi= ele= .

三维网图的高级处理

1. 消隐处理

例.比较网图消隐前后的图形

z=peaks(50);

subplot(2,1,1);

mesh(z);

title('消隐前的网图')

hidden off

subplot(2,1,2)

mesh(z);

title('消隐后的网图')

hidden on

colormap([0 0 1])

 

2.       裁剪处理

利用不定数NaN的特点,可以对网图进行裁剪处理

例.图形裁剪处理

P=peaks(30);

subplot(2,1,1);

mesh(P);

title('裁剪前的网图')

subplot(2,1,2);

P(20:23,9:15)=NaN*ones(4,7);        %剪孔

meshz(P)                         %垂帘网线图

title('裁剪后的网图')

colormap([0 0 1])                   %蓝色网线

  

注意裁剪时矩阵的对应关系,即大小一定要相同.

3.       三维旋转体的绘制

为了一些专业用户可以更方便地绘制出三维旋转体,MATLAB专门提供了2个函数:柱面函数cylinder和球面函数sphere

(1)   柱面图

柱面图绘制由函数cylinder实现.

[X,Y,Z]=cylinder(R,N)  此函数以母线向量R生成单位柱面.母线向量R是在单位高度里等分刻度上定义的半径向量.N为旋转圆周上的分格线的条数.可以用surf(X,Y,Z)来表示此柱面.

[X,Y,Z]=cylinder(R)或[X,Y,Z]=cylinder此形式为默认N=20且R=[1 1]

例.柱面函数演示举例

x=0:pi/20:pi*3;

r=5+cos(x);

[a,b,c]=cylinder(r,30);

mesh(a,b,c)


例.旋转柱面图.

r=abs(exp(-0.25*t).*sin(t));

t=0:pi/12:3*pi;

r=abs(exp(-0.25*t).*sin(t));

[X,Y,Z]=cylinder(r,30);

mesh(X,Y,Z)

colormap([1 0 0])




(2).球面图

球面图绘制由函数sphere来实现

[X,Y,Z]=sphere(N)             此函数生成3个(N+1)*(N+1)的矩阵,利用函数        surf(X,Y,Z) 可产生单位球面.

[X,Y,Z]=sphere         此形式使用了默认值N=20.

Sphere(N)             只是绘制了球面图而不返回任何值.

例.绘制地球表面的气温分布示意图.

[a,b,c]=sphere(40);

t=abs(c);

surf(a,b,c,t);

axis('equal')   %此两句控制坐标轴的大小相同.

axis('square')

colormap('hot')

 6.3 

其他各种二维绘图函数

bar 长条图

errorbar 图形加上误差范围

fplot 较精确的函数图形

polar 极座标图

hist 累计图

rose 极座标累计图

stairs 阶梯图

stem 针状图

fill 实心图

feather 羽毛图

compass 罗盘图

quiver 向量场图 

以下我们针对每个函数举例。 

当资料点数量不多时,长条图是很适合的表示方式:  

close all; % 关闭所有的图形视窗  

x=1:10;   

y=rand(size(x));   

bar(x,y);  




如果已知资料的误差量,就可用errorbar来表示。下例以单位标准差来做资的误差量:

x = linspace(0,2*pi,30);   

y = sin(x);  

e = std(y)*ones(size(x));  

errorbar(x,y,e)  




对於变化剧烈的函数,可用fplot来进行较精确的绘图,会对剧烈变化处进行较密集的取样,如下例:  

fplot('sin(1/x)', [0.02 0.2]); % [0.02 0.2]是绘图范围  

<![endif]>  

若要产生极座标图形,可用polar:  

theta=linspace(0, 2*pi);  

r=cos(4*theta);   

polar(theta, r);  

6、MATLAB图形功能 - 海之子 - 海之子BLOG

对於大量的资料,我们可用hist来显示资料的分 情况和统计特性。下面几个命令可用来验证randn产生的高斯乱数分 :  

x=randn(5000, 1); % 产生5000个 m=0,s=1 的高斯乱数  

hist(x,20); % 20代表长条的个数  




rose和hist很接近,只不过是将资料大小视为角度,资料个数视为距离,并用极座标绘制

表示:  

x=randn(1000, 1);  

rose(x);  

stairs可画出阶梯图:  

x=linspace(0,10,50);  

y=sin(x).*exp(-x/3);  

stairs(x,y);  

<![endif]>  

stems可产生针状图,常被用来绘制数位讯号:  

x=linspace(0,10,50);  

y=sin(x).*exp(-x/3);  

stem(x,y);  




stairs将资料点视为多边行顶点,并将此多边行涂上颜色:  

x=linspace(0,10,50);   

y=sin(x).*exp(-x/3);  

fill(x,y,'b'); % 'b'为蓝色  




feather将每一个资料点视复数,并以箭号画出:   

theta=linspace(0, 2*pi, 20);  

z = cos(theta)+i*sin(theta);  

feather(z);  

compass和feather很接近,只是每个箭号的起点都在圆点:  

theta=linspace(0, 2*pi, 20);  

z = cos(theta)+i*sin(theta);  

compass(z);  

6.4图形的输出

在数学建模中,往往需要将产生的图形输出到Word文档中。通常可采用下述方法:

首先,在MATLAB图形窗口中选择【File】菜单中的【Export】选项,将打开图形输出对话框,在该对话框中可以把图形以emf、bmp、jpg、pgm等格式保存。然后,再打开相应的文档,并在该文档中选择【插入】菜单中的【图片】选项插入相应的图片即可。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多