收藏 分享(赏)

MATLAB绘图速成.pdf

上传人:HR专家 文档编号:6243895 上传时间:2019-04-03 格式:PDF 页数:18 大小:486.90KB
下载 相关 举报
MATLAB绘图速成.pdf_第1页
第1页 / 共18页
MATLAB绘图速成.pdf_第2页
第2页 / 共18页
MATLAB绘图速成.pdf_第3页
第3页 / 共18页
MATLAB绘图速成.pdf_第4页
第4页 / 共18页
MATLAB绘图速成.pdf_第5页
第5页 / 共18页
点击查看更多>>
资源描述

1、附录 MATLAB 绘图 图形功能在 MATLAB 中占据着核心地位。一般的图形显示只需要极少的几条命令即可实现,非常方便。借助一些更复杂的命令,MATLAB 可以将计算结果近乎完美地用图形展示出来。通过图形理解数学语言是一种令人愉快而又非常有效的学习数学的方法。事实上,甚至可以说只有理解了数学表达式的图形意义才是真正的掌握了它们。能够自由自在地绘制出数学函数和数据图形是学习数值分析重要的一步,此附录的目的正是让读者做到这一点。 当前,各个研究领域都会遇到大量数据,这些数据往往难以用数学公式表达。很多情况下可视化是对它们加以分析的唯一途径。这意味着我们需要根据情况选择适当的绘图方式,诸如一维、

2、二维和三维绘图以及运动图象(即四维绘图)等。这是我们鼓励读者学习图形可视化方法的另一个原因。 学习图形命令与学习外语的情形非常类似(当然,前者远比后者容易)。仅仅通过记牢词汇和语法不可能掌握一种语言,练习才是关键。学习图形命令最好的方法即是循序渐进地上机实践。需要特别指出的是,我们不可能罗列 MATLAB 所有的绘图功能,这个附录里介绍的只是实际计算中一些最常用的命令。我们的目的是使读者迅速建立起 Matlab 绘图的基本概念,同时给出进一步学习所必需的提示。我们尽可能用实例进行说明。经常求助 help命令是有益的,在命令窗口键入“doc ”即可进入帮助页面,在那里可以得到所有atlab 命令

3、的详尽解释。 一二维绘图 在第一章里,我们已经学习了基本命令”plot” 。本节我们介绍二维绘图的其他几个常用命令。 1.1 基本命令 下面的程序结果如图 1.1 所示。 clear, clf, hold off % clf:清除图形窗口内容,相关命令有 cla, reset, hold x=(0:0.4:10); y1=sin(x).*exp(-0.4*x); y2=cos(x) .*exp(-0.4*x); plot(x,y1,x,y2,p); % p 表示五角星(其他如:d 为菱形, o 为圆形, 为三角形) axis square % 使所画图形的纵、横坐标刻度比例相同 xlabel(

4、x); ylabel(y=sin(x)times e-0.4x) % MATLAB 中可以使用 Latex grid on legend(y1=sin(x)times e-0.4x,y2=cos(x)times e-0.4x) % 加入图例 figure: 该命令打开一个新的图形窗口,图形窗口按打开先后顺序编号,命令 figure(n)可直接指定创建窗口的编号为 n。如果存在多个图形窗口,必须知道哪一个是当前窗口。所有图形命令都作用于当前窗口。除非特别指出,最后打开的窗口即为当前窗口。键入命令figure(n)可使编号为 n 的图形窗口成为当前窗口。 close: close(n)关闭编号为

5、n 的图形窗口,close all 关闭所有图形窗口。 axis,axis on,axis off: 坐标轴的刻度范围和刻度值均可自动设定。不过,也可用 axis 命令改变这些参数。 zoom: 通过 zoom 命令可以交互式地缩放图形的指定部分,无需使用 axis。在命令窗口1键入 zoom,然后在图形窗口按下鼠标左键,拖动鼠标将需要放大的部分用“取景框”围住。放开鼠标键便立即得到选定部分的局部放大图。再用鼠标点击图形窗口,则图形恢复到放大前的情形。 0 2 4 6 8 10-0.4-0.200.20.40.60.81xy1=sin(x)e-0.4x, y2=cos(x)e-0.4xy1=s

6、in(x) e-0.4xy2=cos(x) e-0.4x图 1.1 坐标轴标注与注释 1.2 极坐标绘图 命令 polar 绘制极坐标函数的图形。图 1.2 由下面程序画出。 t=0:.05:pi+0.01; y=sin(3*t).*exp(-0.3*t); polar(t,y) title(Polar plot) % xlabel、ylabel 和 title 给图形加入坐标轴标注和标题 0.20.40.60.81302106024090270120300150330180 0Polar plot图 1.2 极坐标绘图 21.3 对数和半对数绘图 如图 1.3 所示。 t=0.1:0.1:3

7、; x=exp(t); y1=exp(t.*sinh(t); y2=exp(t.*t); subplot(1,2,1); loglog(x,y1);grid, xlabel(x); ylabel(y1) subplot(1,2,2); semilogy(t,y2); xlabel(t); ylabel(et2) 100101102100102104106108101010121014xy10 1 2 3100101102103104tet2图 1.3 对数坐标图和半对数坐标图 二三维绘图 2.1 绘制三维图形 绘制三维图形曲线和曲面最常用的命令是 plot3 和 mesh。下面是一个应用 pl

8、ot3 的实例,如图 2.1 所示。 clear, clf t=0:0.1:20; r=exp(-0.2*t); th=pi*t*0.5; z=t; x=r.*cos(th); y=r.*sin(th); plot3(x,y,z), hold on plot3(1,1,-0.5,0,0,0,rs) % r 表示红色,s 表示正方形 text(1,-0.7,0, A); % 文本标注 n=length(x); text(x(n),y(n),z(n)+2, B) xlabel(X); ylabel(Y), zlabel(Z); 二元函数可以通过 mesh 命令用离散点来表示,下面程序作出二元函数

9、在区域 上的图形,如图 2.2 示。 22yxexz=2,22,2 clear,clf x =-2:.2:2; y=-2:.2:2; X,Y=meshgrid(x, y); % 生成网格 Z =X.*exp(-X.2-Y.2); 3mesh(X,Y,Z); title(这是函数 z=x*e-x.2-y.2 对应的三维图形 ); xlabel(x); ylabel(y); zlabel(z); -1-0.500.51-1-0.500.5105101520AXBYZ图 2.1 plot3 画的三维曲线图 -2-1012-2-1012-0.500.5x这是函数z=x*e-x2-y2对应的三维图形 y

10、z图 2.2 二元函数的网格图 默认颜色: 在彩色屏幕上,连接点与点之间的直线由默认颜色设置 hsv(带饱和值的色图)着色。把 z(i,j)的最大值和最小值处均设置为红色,在最大值和最小值之间按照红、黄、绿、青、蓝、紫再到红的顺序均匀着色。以如下程序为例,其结果如图 2.2 所示。 4clear;clf for i=1:4 for j=1:7 z(j,i)=sqrt(i2+j2); end end mesh(z) xlabel(x);ylabel(y);zlabel(z) 在彩色屏幕上,图 2.3 最大值处的直线是紫色,最小值处是略带红色的黄色。这是因为直线的颜色由其两端点处 z 值的平均值决

11、定。对于当前的网格图,最大值处直线的颜色值接近紫色,最小值处直线的颜色值接近黄色。如果按更细的网格绘制此图,则最大值和最小值处的直线均变为红色。 图 2.3 曲面的网格图 2.2 等高线 contour: 等高线命令 contour 调用格式为:contour(x,y,z,level) ,其中 x、y 和 z 的含义与 mesh 中的相应参数完全一样。level 是表示等高线高度的数组,它也可以是一个整数 m,此整数表示等高线的数目。等高线的高度取为将 z 的值域等分 m-1 份所得到的 m 个等分点的值。图 2.4 显示了函数 的等高线图。等高线图必须加有注释说明等高线的高度。clabel(

12、h) 是自动注释命令,clabel(h,manual) 为手动注释命令。 )exp(22yxxz =clear, clc, clf, axis square xm=-2:.2:2; ym=-2:.2:2; x,y=meshgrid(xm, ym); z=x.*exp(-x.2-y.2); zmax=max(max(z); zmin=min(min(z); 5dz=(zmax-zmin)/10; level=(zmin+0.5*dz:dz:zmax); h=contour(x,y,z,level); clabel(h, manual); % 手动注释,用鼠标选择高度值的位置 title(Cont

13、our plot by contour(x,y,z,level) xlabel(x); ylabel(y); 图 2.4 等高线图 隐函数绘图: contour 命令还可以用来绘制隐函数的图形,例如: 。为了绘制曲线,将方程重新写为 。只画出对应于 f=0 的等高线图,如图 2.5 所示。 )tanh()exp(3xyy =+)tanh()exp(),(3xyyyxf +=clear , clf xm=-3:0.2:3; ym=-2:0.2:1; x,y=meshgrid(xm,ym); f=y.3+exp(y)-tanh(x); contour(x,y,f,0,0) xlabel(x); y

14、label(y); 注意到上面的命令文件里,将 contour 命令中表示等高线高度的参数向量设定为0 0 。虽然我们感兴趣的只是值等高线,但是由于等高线的高度一定要以向量形式表示,所以上述文件中把 0 写两遍变成一个向量进行处理。 6图 2.5 隐函数图 三维网格图的等高线:meshc 在 x-y 平面上绘制 z 的等高线,其对应的三维网格图是mesh(z),如图 2.6 所示。 clear, clf, hold off j=1:21; i=1:10; x=log(i); y=log(j); x,y=meshgrid(x,y); z=sqrt(0.1*(x-log(5).2+(y-log(5

15、).2)+1; meshc(x,y,z) xlabel(x); ylabel(y); zlabel(z); 00.511.522.50123411.21.41.61.8xyz图 2.6 一个矩阵的网格和等高线 7三维表面与等高线: surf 和 surfc 命令绘制的图形与 mesh 和 meshc 所绘图形类似。区别仅在于 surf 和 surfc 将所有小的三维网格区域着色,从而得到三维表面图。小网格区域的颜色由其四个顶点处 z 的平均值决定。 带有亮度的三维表面:surf 命令可以用 surf1 来代替,所不同的是后者绘制的三维表面图带有亮度变化。光源的方向可以指定。例如,基本用法 su

16、rf1(x,y,z)的亮度采用默认值。特定的光源方向可以用 surf1(x,y,z,s)指定,其中 s 是方向向量。建议将 surf1 与 colormap gray和 shading flat 或 shading interp 共同使用。 色轴: mesh 和 surf 命令里的第四个参数可以控制图形的颜色;例如: mesh(x,y,z,c)第四个参数 c 指定颜色坐标,它是一个与 z 大小相同的向量。如果 c 省略,则默认 c=z,从而直线和曲面的颜色由 z 的值决定。 色图由 colormap 命令设置,其默认状态为 colormap(hsv)。此时,c(j,i) 的最大值点和最小值点均

17、设为红色。最大值和最小值之间的点按照红、黄、绿、青、蓝、紫再到红的顺序均匀着色。不过,用户可以通过定义 c 向量给网格点赋不同的颜色值。命令 caxis(0,100) 将色图设置为 0 到 100 之间。如果将颜色矩阵的元素都设定为接近 0 的数,则整个图形将呈微红色,如果颜色矩阵的元素都在 50 左右,则整个图形将变成带有点蓝色的紫色。 色图:可以通过 colormap 命令改变色轴上的颜色定义。除了 colormap(hsv),可供选择的色图定义还有 colormap(hot)、colormap(cold) 和 colormap(jet)。读者可以尝试用这些命令 改变三维网格或表面图的颜色

18、,以熟悉它们的性质。 shading: surf 创建的图形对象由许多用黑线分隔而成的小四边形组成。这对应着 shading命令的默认情形,即 shading faceted。shading flat 命令去掉边框线。Shading interp 去掉边框线,同时让表面的颜色均匀过渡。 再谈 hold on: 对于非常费时的绘图操作, hold on 命令非常重要。原因是:图形绘制过程中,有些命令会改变一些图形属性,诸如轴的控制设置、色图、视角、色轴等。每用一条这样的命令,整个图形将重绘一遍。所以绘图前先给出所有属性命令,然后用 hold on 保持可以大大节省时间。 三统计绘图 这一节,我们

19、介绍统计数据的图形表示。 3.1 条形图 共有四条命令绘制 2 维和 3 维条形图,它们是 bar、 barh、 bar3 和 bar3h。下面程序为二维条形图实例,如图 3.1 所示。 clear, close X=0:5:20; Y=7 6 5; 6 8 1; 4 5 9; 2 3 4; 9 7 2; % 记 Y 的行数为 M=5, 列数为 N=3 subplot(2,2,1) bar(X, Y) % 按行将 Y 分为 5 组,以直方图显示每一组各元素的取值,向量 X 必% 须按升序或降序排列. title(基本 bar 图) subplot(2,2,2) bar(Y) % 和 bar(1

20、:M, Y)等价 8title(基本 bar 图) subplot(2,2,3) bar( Y,stacked) % 绘制垛图,即将 Y 的一行元素表示在一个直方条中 title(垛图) subplot(2,2,4) barh( Y) % 水平条形图 title(水平条形图) 0 5 10 15 200246810基本bar图1 2 3 4 50246810基本bar图1 2 3 4 505101520垛图0 5 1012345水平条形图图 3.1 2 维条形图 123123450510分离图123450510组图1234501020垛图051012345水平三维条形图图 3.2 三维条形图实

21、例 图 3.2 是三维条形图实例,由下面的程序实现。 clear, close, Y=7 6 5; 6 8 1; 4 5 9; 2 3 4; 9 7 2; subplot(2,2,1) bar3(Y) title(基本三维条形图) subplot(2,2,2) bar3(Y,grouped) title(组图) 9subplot(2,2,3) bar3(Y,stacked) title(垛图) subplot(2,2,4) bar3h(Y) title(水平三维条形图) 3.2 柱状图 柱状图用 hist 命令生成,其功能为图形显示落入指定区间的元素个数。 图 3.3 是由下面程序实现的柱状图

22、。 randn(state,1) % 以状态生成正态随机数,设定不同状态以避免随机数列重复 y=exp(randn(1000,1)/3); subplot(2,2,1); hist(y); % 在 1 0(默认值)个等分区间内画出x 中数据的统计频数直方图。 title(输入数据为 1000 1 的向量, 10 等分区间 ) subplot(2,2,2); hist(y,25); % 指定等分区间个数为 25 title(25 个等分区间 ) subplot(2,2,3); hist(y,min(y):.1:max(y); title(等分区间宽度设为 0.1) y=exp(randn(100

23、0,3)/3); subplot(2,2,4); hist(Y); title(输入数据为 10003 矩阵); 0 1 2 30100200300输入数据为10001向量, 10等分区间0 1 2 305010015025个等分区间0 1 2 3050100150等分区间宽度设为0.10 1 2 3 40100200300400输入数据为10003矩阵图 3. 柱状图 3.3 圆盘图 pie 和 pie3 分别绘制平面和立体的圆盘图,如图 3.4 所示。 x=1.5 3.4 4.2; subplot(2,2,1); pie(x); % 按照各分量大小划分圆盘的面积,显示各部分百分比 subp

24、lot(2,2,2); pie(x,0 0 1); % 使得位置对应的部分从圆盘中分离 subplot(2,2,3); pie(x,Slice 1,Slice 2,Slice 3); % 给各部分命名 subplot(2,2,4); pie3(x,0 1 0) % 立体圆盘图 3.4 区域图 区域图命令为 area它的功能和 plot 相似,所不同的是区域图中曲线与 x 坐标轴所夹区域将被填充。 randn(state,1); x=1:12 11:-1:8 10:15; Y=x x; 10subplot(2,1,1); area(Y+randn(size(Y); subplot(2,1,2);

25、 Y=Y+5*randn(size(Y); area(Y,min(min(Y); axis tight 16%37%46%16%37%46%Slice 1Slice 2Slice 346%37%16%图 3. 圆盘图 2 4 6 8 10 12 14 16 18 20 2201020302 4 6 8 10 12 14 16 18 20 220102030图 3.5 区域图 四图形句柄 前面几节所介绍的图形函数已经足以应付一般性的需要。如果希望对图形对象做一些底层的操作,则必须借助图形句柄来实现。 Matlab 规定每一个图形对象被赋与一个特定的数值,这个数值即称为图形句柄。 命令 a1=pl

26、ot(1:10, o-) 得到图 4.1(左) 。下面将以此图为例仔细考察如何对图形对象进行控制,操作结果如图 4.1(右)所示。 11 h=findobj % 获得所有图形对象的句柄 h = 0 % Matlab 约定第一个句柄表示根对象,即屏幕,此值永远是 1.0000 % 此句柄表示图形窗口 101.0009 3.0010 get(h,type) % 获得所有句柄的含义 ans = root figure axes % 由此可知 h(3)是坐标轴对象的句柄 line % h() 表示线对象。 通过句柄,可以直接得到访问对象的各种属性,从而做到只改变某一特定属性且不对其他对象和属性产生影响

27、。 set(h(3) % 获得指定图形对象的所有属性以及每一属性可能的状态 ALim ALimMode: auto | manual % 方括号中列出所有可能的状态 AmbientLightColor Box: on | off % 花括号内为该属性的默认状态 CameraPosition CameraPositionMode: auto | manual % 这里省略了大约 80 行内容 Visible: on | off 同样,键入 set(h(4) 将得到线对象的所有属性信息。 set(h(3),XScale) % 对于指定属性的状态,也可用 set 命令直接得到 linear | lo

28、g set(h(3),XScale,log) % 将坐标轴改为对数坐标 set(h(),Marker,s,MarkerSize,16) % 改变线对象的顶点标记符号和大小 0 5 1002468101001010246810图. 句柄操作实例 一般说来,如果打算修改对象的属性,需要在创建它们的时候保存句柄,这样即可利用句柄对图形做底层的操作。不过,即便没有做这样的准备仍有办法使用句柄。对于已经创建的对象,其句柄可以用gca 、 gcf 和 gco 代替。其中,gca 对应当前坐标轴,gcf 对应当前图形窗口, gco 对应当前的图形对象(即最近一次鼠标点击的对象)。 12运行下述命令,结果如图

29、 4.2 所示. 。 x=linspace(0,2*pi,35); a1=subplot(2,1,1); % 坐标轴对象 l1=plot(x,sin(x),x); % 线对象 a2=subplot(2,1,2); % 坐标轴对象 l2=plot(x,cos(x).*sin(x); % 线对象 tx2=xlabel(x);ty2=ylabel(y); % 文本对象 0 1 2 3 4 5 6 7-1010 1 2 3 4 5 6 7-0.500.5xy图. 直接使用 subplot 所绘图形 -1-0.500.51pi/2 pi 2pi-0.500.5xy图.3 使用图形句柄对图 4.2 操作后

30、的结果 下面的命令将它们改变为图 4.3 所示的效果。 set(a1,Box,off) % 去除坐标轴边框 set(a1,XTick,) % 去除坐标轴刻度 set(a1,YAxisLocation, right) % 将轴移到坐标系的右边 set(a1 ,TickDir,out) %位 坐标轴刻度标记的指向,,out 表示指向坐标轴外侧 set(l1,Marker,1 end end hold off 这个例子说明了 ginput 的调用格式。执行此程序,它会等待鼠标点击。如果按下鼠标左键,一个红色的+ 号将出现在屏幕上的点击处。类似地,点击中键或右键时,屏幕上会分别出现黄色的 O号或绿色的

31、 *号。用鼠标点击屏幕左下角方框中的光标可使执行中止。图 2.34 显15示了 List2.31 绘制的符号。 0 1 2 3 4 5 6 7 8 9 10012345678910Click inside the box to teminate图. 鼠标相应功能实例 5. 动画 动画的一个很自然应用就是显示与时间有关的现象。动画还可以用来从不同角度并以不同比例显示复杂对象。动画的原理很简单;那就是连续显示一组图形或图像。本节将通过实例说明如何制作和显示动画。用 MATLAB 制作动画简单而有趣。 例用 getframe、 moviein 和 movie 等命令实现动画 clear Z=peak

32、s; surf(Z); axis tight; disp(Create the movie); pause; % 暂停命令,按下任意键后继续执行后面命令 for j=1:11 surf(cos(2*pi*(j-1)/10).*Z,Z); F(j)=getframe; end disp(Play the movie) pause movie(F) % 播放动画 getframe: getframe 命令从当前图形窗口俘获一帧图片,并将每帧图片写入一个列向量,它有如下两种格式: geframe, geframe(h)。第一种格式俘获当前图形窗口的全部内容。第二种格式里的 h 是根对象、图形窗口或坐

33、标轴的句炳。所以 geframe(h)得到的是句柄 h 所对应的对象或窗口。 moviein: M=moviein(n)创建矩阵 M,此矩阵保存当前图形窗口的 n 帧图片。 M=moviein(n,h)创建矩阵 M,此矩阵保存来自句柄 h 所对应的对象或窗口的 n 帧图片。 例 2用对象的 XData,YData,Zdata 属性实现动画 x=linspace(-pi,pi,2000); y=cos(tan(x)-tan(sin(x); p=plot(x(1),y(1),.,EraseMode,none,MarkerSize,5); axis(min(x) max(x) min(y) max(

34、y); hold on; 16for i=2:length(x) set(p,XData,x(i),YData,y(i) drawnow % 完成待做的绘图事件,更新图形窗口 end hold off 010203040500204060-8-6-4-20246图.2 例动画中一帧图片 图. 例动画中的最终结果 5.5 声音 Matlab可以使用sound命令制作声音向量。 sound (y) 将向量y 传送给扬声器。向量确定了最大振幅。 sound (y,f) 与上面的命令相似,而且还设定采样频率为f Hz 。该命令不能用于SUN 公司17的SPARC 工作站。 soundsc(x,f,sl

35、im) 采用与sound 相同的方式播放向量x ,但是shoundsc 给出的声音向量,声音可以尽可能地大。 f表示采样频率,此项可以缺省。这里slim 设定满音量范围,缺省值为min(x) max(x) 。 例1 正弦波的声音: x=sin(linspace(0, 10000, 10000); % 正弦波 sound ( x ); % 产生声音。 例用load命令载入几个预定义的声音。下面试试其中的两个。 load train; % 装入产生火车汽笛的声音数据 whos ; % 显示变量y , Fs 。向量y 表示创建的信号;标量Fs 表示以Hz 为单位的频率 sound(y); % 产生声音 load chirp; % 装入产生鸟儿唧唧喳喳声音的数据 sound(y); % 产生新的声音 在某些系统中还有一些附加的声音命令;用help sounds 可以了解这些特殊的系统。 18

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报