Matlab学习笔记——基本绘图功能

MATLAB两种基本绘图功能:二维平面图形和三维立体图形

一、二维平面图形

1.基本图形函数

plot是绘制二维图形的最基本函数,它是针对向量或矩阵的列来绘制曲线的。也就是说,使用plot函数之前,必须首先定义好曲线上每一点的x 及y 坐标,常用格式为:

(1)plot(x) 当x 为一向量时,以x元素的值为纵坐标,x的序号为横坐标值绘制曲线。当x为一实矩阵时,则以其序号为横坐标,按列绘制每列元素值相对于其序号的曲线,当x 为m× n 矩阵时,就由n 条曲线。

(2)plot(x,y) 以x 元素为横坐标值,y 元素为纵坐标值绘制曲线。

(3)plot(x,y1,x,y2,…) 以公共的x 元素为横坐标值,以y1,y2,… 元素为纵坐标值绘。

2.制多条曲线

画出一条正弦曲线和一条余弦曲线,如图1所示。

 x=0:pi/10:2*pi;
 y1=sin(x);
 y2=cos(x);
 plot(x,y1,x,y2)

图1 函数plot 绘制的正弦曲线

表 绘图参数表

例如,在上例中输入下面语句,则得图2所示。

 plot(x,y1,'r+-',x,y2,'k*:')

图2 使用不同标记的plot 函数绘制的正弦曲线

3. 图形修饰

MATLAB 软件为用户提供了一些特殊的图形函数,用于修饰已经绘制好的图形。

函数含义:

grid on (/off) 给当前图形标记添加(取消)网络

xlable(‘string’) 标记横坐标

ylabel(‘string’) 标记纵坐标

title(‘string’) 给图形添加标题

text(x,y,’string’) 在图形的任意位置增加说明性文本信息

gtext(‘string’) 利用鼠标添加说明性文本信息

axis([xmin xmax ymin ymax]) 设置坐标轴的最小最大值

给图形中加入网络和标记,如图3所示

 x=0:pi/10:2*pi;
 y1=sin(x);
 y2=cos(x);
 plot(x,y1,x,y2)
 grid on
 xlabel('independent variable X')
 ylabel('Dependent Variable Y1 & Y2')
 title('Sine and Cosine Curve')
 text(1.5,0.3,'cos(x)')
 gtext('sin(x)')
 axis([0 2*pi -0.9 0.9])

图3 使用了图形修饰的plot函数绘制的正弦曲线

在一般默认的情况下,MATLAB 每次使用plot 函数进行图形绘制,将重新产生一个图形窗口。但有时希望后续的图形能够和前面所绘制的图形进行比较。一般来说有两种方法:

一是采用hold on(/off)命令,将新产生的图形曲线叠加到已有的图形上;

二是采用subplot(m,n,k)函数,将图形窗口分隔成m×n个子图,并选择第k个子图作为当前图形,然后在同一个视图窗口中画出多个小图形。

在同一窗口中绘制线段。(见图4)

 x=0:pi/10:2*pi;
 y1=sin(x);
 y2=cos(x);
 y3=x;
 y4=log(x);
 plot(x,y1,x,y2)
 hold on
 plot(x,y3)
 plot(x,y4)
 hold off

图4 图形的比较显示(曲线叠加方法)

在多个窗口中绘制图形。(见图5)

 x=0:pi/10:2*pi;
 y1=sin(x);
 y2=cos(x);
 y3=exp(x);
 y4=log(x);
 subplot(2,2,1);
 plot(x,y1);
 subplot(2,2,2);
 plot(x,y2);
 subplot(2,2,3);
 plot(x,y3);
 subplot(2,2,4);
 plot(x,y4);

图5 图形的比较显示(图形窗口分割方法)

说明:

(1)子窗口的序号按行由上往下,按列从左向右编号。

(2)如果不用指令clf 清除,以后图形将被绘制在子图形窗口中。

二、三维立体图形

1.三维曲线图

与二维图形相对应,MATLAB 提供了plot3 函数,可以在三维空间中绘制三维曲线,它的格式类似于plot,不过多了z方向的数据。plot3 的调用格式为:plot3(x1,y1,z1,x2,y2,z2,...)其中x1,y1,z1,x2,y2,z2,…等分别为维数相同的向量,分别存储着曲线的三个坐标值,该

函数的使用方式和plot 类似,也可以采用多种的颜色或线型(见表)来区分不同的数据组,只需在每组变量后面加上相关字符串即可实现该功能。

绘制方程x=t;y=sin(t);z=cos(t)在t=[0,2*pi]上的空间方程。(见图6)

 clf
 x=0:pi/10:2*pi;
 y1=sin(x);
 y2=cos(x);
 plot3(y1,y2,x,'m:p')
 grid on
 xlabel('Dependent Variable Y1')
 ylabel('Dependent Variable Y2')
 zlabel('Independent Variable X')
 title('Sine and Cosine Curve')

图6 函数plot绘制的三维曲线图

2.三维曲面图

如果要画一个三维的曲面,可以使用mesh(X,Y,Z)或surf(X,Y,Z)函数来实现。mesh 函数为数据点绘制网格线,图形中的每一个已知点和其附近的点用直线连接。surf函数和mesh 的用法类似,但它可以画出着色表面图,图形中的每一个已知点与其相邻点以平面连接。为方便测试立体绘图,MATLAB 提供了一个peaks 函数,它可以产生一个的高斯分布矩阵,其生成方程是z=3*(1-x).^2.*exp(-(x.^2)-(y+1).^2)-10*(x/5-x.^3-y.^5).*exp(-x.^2-y.^2)-1/3*exp(-(x+1).^2-y.^2)对应的图形是一个凹凸有致的曲面,包含了三个局部极大点及三个局部极小点。

下面使用peaks 函数来比较一下mesh 和surf 的区别。

分别用mesh 函数和surf 函数绘制高斯矩阵的曲面。

 z=peaks(40);
 mesh(z);
 surf(z);

图7 mesh函数绘制的三维曲面图

图8 surf 函数绘制的着色表面图

在曲面绘图中,另一个常用函数是meshgrid 函数,其一般引用格式:[X, Y]=meshgrid (x, y)其中x 和y 是向量,通过meshgrid 函数就可将x和y指定的区域转换成为矩阵X和Y。

这样我们在绘图时就可以先用meshgrid函数产生在x-y平面上的二维的网格数据,再以一组z 轴的数据对应到这个二维的网格,即可画出三维的曲面。

绘制方程

sin((x^2+y^2)^(1/2))

z = ---------------------

(x^2+y^2)^(1/2)

在x∈[-7.5,7.5];y∈[-7.5,7.5] 的图形。(见图9)

 x=-7.5:0.5:7.5;y=x;
 [X,Y]=meshgrid(x,y);
 R=sqrt(X.^2+Y.^2)+eps;
 Z=sin(R)./R;
 surf(X,Y,Z)
 xlabel('X 轴方向')
 ylabel('Y 轴方向')
 zlabel('Z 轴方向')

图9 三维曲面图

3.观察点

MTALAB 允许用户设置观察点,其指令是:view(azimuth,elevation)其中方位角azimuth是观察点和坐标原点连线在x-y 平面的投影和y 轴负方向的夹角,仰角elevation是观察点与坐标原点的连线和x-y 平面的夹角。对于这两个角度,三维图形的默认值分别是-37.5和30,二维图形的默认值是0和90。

从不同的角度观察高斯矩阵的曲面。

 z=peaks(40);
 subplot(2,2,1);
 mesh(z);
 subplot(2,2,2);
 mesh(z);
 view(-37.5,-30);
 subplot(2,2,3);
 mesh(z);
 view(180,0);
 subplot(2,2,4);
 mesh(z);
 view(0,90);

图10对应不同观察点的三维曲面图

4.其他图形函数

除了plot 绘图函数以外,在有些场合对绘制的曲线会有一些特殊要求,这就要其他函

数来实现,常用的几种函数如下

函数含义

loglog 使用对数坐标系绘图

semilogx 横坐标为对数坐标轴,纵坐标为线性坐标轴

semilogy 横坐标为线性坐标轴,纵坐标为对数坐标轴

polar 绘制极坐标图

fill 绘制实心图

bar 绘制直方图

pie 绘制饼图

area 绘制面积图

quiver 绘制向量场图

stairs 绘制阶梯图

sterm 绘制火柴杆图

 x=0:pi/10:2*pi;
 y1=sin(x);
 subplot(2,2,1);
 plot(x,y1);
 subplot(2,2,2);
 bar(x,y1);
 subplot(2,2,3);
 fill(x,y1,'g');
 subplot(2,2,4);
 stairs(x,y1,'k');

图11 其他图形函数

4.1直方图

函数bar(x)可以绘制直方图,这对统计或者数据采集非常直观实用。它共有四种形式:bar,bar3,barh和bar3h,其中bar和bar3 分别用来绘制二维和三维竖直方图,barh和bar3h分别用来绘制二维和三维水平直方图,调用格式是:bar(x,y) 其中x 必须单调递增或递减,y为m×n矩阵,可视化结果为m组,每组n个垂直柱,也就是把y的行画在一起,同一列的数据用相同的颜色表示;bar(x,y,width) (或bar(y,width))指定每个直方条的宽度,如width>1,则直方条会重叠,默认值为width=0.8;bar(…,’grouped’)
使同一组直方条紧紧靠在一起;bar(…,’stack’) 把同一组数据描述在一个直方条上。

 y=[5 3 2 9;4 7 2 7;1 5 7 3];
 subplot(2,2,1),bar(y)
 x=[5 9 11];
 subplot(2,2,2),bar3(x,y)
 subplot(2,2,3),bar(x,y,'grouped')
 subplot(2,2,4),bar(rand(2,3),.75,'stack')

图12 直方图

4.2 面积图

函数area 用来绘制面积图,面积图在plot 的基础上填充x 轴和曲线之间的面积,该图用于查看某个数在该列所有数的总和中所占的比例。

 x=-3:3;
 y=[3 2 5;6 1 8;7 4 9;6 3 7;8 2 9;4 2 9;3 1 7];
 area(x,y)

图13 面积图

4.3 饼图

函数pie 用来绘制饼图,它可以形象地表示出向量中各元素所占比例。其调用格式是:

pie(x) x 中的元素通过x/sum(x)进行归一化,以确定饼图中的份额;

pie(x,explode) 向量explode 和x 元素数相同,用来指出需要分开的饼片,explode 中不为零的部分会被分开。

设某班的某课程的考试成绩如下:90 分以上有32 人,81 至90 有58 人,71至80 分有27 人,60 至70 分为21 人,60 分以下有16 人,画出饼图。

 x=[32 58 27 21 16];
 explode0=[1 0 0 0 0];
 subplot(1,2,1)
 pie(x,explode0)
 explode1=[0 0 0 0 1];
 subplot(1,2,2)
 pie(x,explode1)

图14 饼图

4.4 不同坐标系中的绘图

Semilogx,semilogy,loglo,polar(theta,rho)的使用方法和plot 完全类似,不同的只是绘制到不同的图形坐标上。函数semilogx 绘制x 轴为对数标度的图形,在半对数坐标系中绘图;函数semilogy 绘制y 轴为对数标度的图形;函数loglog 绘制两个轴都为对数间隔的图形;函数polar(theta,rho)绘制极坐标图形,其中theta 为相角,rho 为其对应的半径。

绘制ρ=acos(3θ),a=2 的图形。

theta=-pi:pi/80:pi;
polar(theta,2*cos(3*theta))

图15 极坐标图

5.符号表达式绘图

MATLAB 软件提供了将表达式进行图形显示的功能。完成此功能需调用fplot函数和ezplot函数。函数fplot用来绘制数学函数,其调用格式为:fplot(fun,lims)其中fun就是所要绘制的函数,可以是定义函数的M文件名,也可以是以x为变量的可计算字符串。例如’diric(x,10)’或’[sin(x),cos(x)]’,对于向量x的每个元素,函数fun(x)必须返回一个行向量。如果fun 返回[f1(x),f2(x),f3(x)],输入[x1;x2],就会返回矩阵

f1(x1) f2(x1) f3(x1)

f1(x2) f2(x2) f3(x2)

lims=[XMIN XMAX YMIN YMAX]限定了x,y 轴上的绘图空间。

 subplot(2,2,1),fplot('humps',[0 1])
 subplot(2,2,2),fplot('abs(exp(-j*x*(0:9))*ones(10,1))',[0 2*pi])
 subplot(2,2,3),fplot('[tan(x),sin(x),cos(x)]',2*pi*[-1 1 -1 1])
 subplot(2,2,4),fplot('sin(1./x)',[0.01 0],1e-3)

图16 fplot 函数绘制表达式图形

ezplot函数是简捷绘图指令之一,它无需数据准备,直接画出函数图形,基本调用格式为ezplot(f)其中f是字符串或代表数学函数的符号表达式,只有一个符号变量,可以是x,我们可以用ezplot(f,xmin,xmax)或ezplot(f,[xmin,xmax])来指定x的范围。

 y='x^2';
 subplot(1,2,1)
 ezplot(y)
 subplot(1,2,2)
 y='sin(x)';
 ezplot(y,[-pi,pi])

图17 ezplot 函数绘制表达式图形

6. plot 函数

MATLAB 对数据是按列存储和计算的,运用plot(x)时,当x 为一个向量时,以其元素为纵坐标,其序号为横坐标值绘制曲线。当x 为实矩阵时,则以其序号为横坐标,按列绘制每列元素相对于序号的曲线,当x为m×n 矩阵时,就有n条曲线。如果x,y 是同维向量,plot(x,y)指令以x元素为横坐标值,y元素为纵坐标值绘制曲线。如x是向量,y是有一维与x 元素数量相等的矩阵,则以x 为共同横坐标,按列绘制y每列元素值,曲线数为y 的另一维的元素数。如果x,y 是同维矩阵,则以x,y 对应列元素为、纵坐标分别绘制曲线,数目等于矩阵的列数。

 x=[3 5 10 8];
 subplot(2,2,1)
 plot(x)
 x=[3 5 10 8;7 2 9 4;2 7 2 7]';
 subplot(2,2,2)
 plot(x)
 x=[3 5 6 8];
 y=[1 5 10 4];
 subplot(2,2,3)
 plot(x,y)
 x=[1 3 5 7;2 4 6 8]';
 y=[6 2 5 10;3 5 2 6]';
 subplot(2,2,4)
 plot(x,y,'k:*')

图18 plot函数

时间: 2024-08-30 08:04:52

Matlab学习笔记——基本绘图功能的相关文章

R语言学习笔记2——绘图

R语言提供了非常强大的图形绘制功能.下面来看一个例子: > dose <- c(20, 30, 40, 45, 60)> drugA <- c(16, 20, 27, 40, 60)> drugB <- c(15, 18, 25, 31, 40) > plot(dose, drugA, type="b") > plot(dose, drugB, type="b") 该例中,我们引入了R语言中第一个绘图函数plot.pl

matlab学习笔记 bsxfun函数

matlab学习笔记 bsxfun函数 最近总是遇到 bsxfun这个函数,前几次因为无关紧要只是大概看了一下函数体去对比结果,今天再一次遇见了这个函数,想想还是有必要掌握的,遂查了些资料总结如下.   函数bsxfun [功能描述]两个数组间元素逐个计算. [应用场合]当我们想对一个矩阵A的每一列或者每一行与同一个长度相等的向量a进行某些操作(比较大小,乘除等)时,我们只能用循环方法或者利用repmat函数将要操作的向量a复制成和A一样尺寸的矩阵,进而进行操作.从MATLAB R2007a开始

matlab学习笔记(一)单元数组

matlab学习笔记(一)单元数组 1.floor(x) :取最小的整数 floor(3.18)=3,floor(3.98)=3 ceil(x)  :取最大的整数 ceil(3.18)=4,ceil(3.18)=42.单元数组和结构体作用差不多, 相同点:都是存放不同类型的数据,能实现不同类型数据的存储机制. 不同点:结构体数组的 各个元素下有成员,并且每个成员有自己的名字,而单元数组没有成员和成员 名字的感念.3.单元数组,用[]表示元素间隔:用,表示元素之间的间隔:用:表示行间隔. 例如:c

[转载]Matlab实用小技巧——Matlab学习笔记

1.. Ctrl+C 中断正在执行的操作 如果程序不小心进入死循环,或者计算时间太长,可以在命令窗口中使用Ctrl+c来中断.MATLAB这时可能正疲于应付,响应会有些滞后. 2. figure命令新建一个绘图窗口 figure 可以打开一个空的绘图窗口,接下的绘图命令可以将图画在它里面,而不会覆盖以前的绘图窗口.当有多个figure窗口时,在命令窗口中执行如Plot等命令将覆盖当前figure窗口中的对象.所谓的当前figure窗口,也就是最后一次查看的窗口(可以用命令gcf得到). figu

matlab学习笔记第三章——绘图与图形

1.在MATLAB中绘图包含下面三个步骤: a.定义函数 b.指定要绘制的函数图形的值范围 c.调用MATLAB的plot(x, y)函数 例:>> x = [0:0.1:10]; >> y = cos(x); >> plot(x, y) 2.绘制一个坐标轴有标签的图象,这可以通过xlabel和ylabel函数做到: >> x = [0:0.01:10]; >> y = cos(x); >> plot(x, y), xlabel('x

MATLAB学习笔记(五)&mdash;&mdash;MATLAB绘图

(一)二维数据曲线图 一.绘制单根二维曲线 1.基本调用格式 plot(x,y) (1)x,y为长度相同的向量,分别用于储存x坐标和y坐标数据 (2)用于绘制以x,y为横,纵坐标的二维曲线. (3)举例 >> x=linspace(0,2*pi,100); >> y=2*exp(-5*x).*cos(4*pi*x); >> plot(x,y) 效果如下: 从这里我们可以明白plot绘图,其实是取点,然后用光滑的曲线进行连接的. 2.plot函数最简单的调用格式 plot

matlab学习笔记之五种常见的图形绘制功能

分类: 离散数据图形绘制 函数图形绘制 网格图形绘制 曲面图形绘制 特殊图形绘制 本文重点介绍matlab五种图形绘制方法的后三种. 一.网格图形绘制 以绘制函数z=f(x,y)三维网格图为例,下面为绘制步骤: 确定自变量x和y的取值范围和取值间隔 x = x1:dx:x2; y = y1:dy:y2; 2.构成xoy平面上的自变量采样格点矩阵 1)  利用“格点”矩阵生成原理生成矩阵 X = ones(size(y))*x; Y = y*ones(size(x)); 2)  利用meshgri

Matlab学习笔记(1)

本文为本人学习Matlab基础知识是做的一些笔记,希望可以对大家有所帮助 (>_<) p.s. 英文来自于Matlab帮助文档 - 表示 指令的续行输入. 矩阵的输入: a)        A = [1, 2, 3; 4, 5, 6; 7, 8, 9] b)        A = [1, 2, 3 4, 5, 6 7, 8, 9] 3. 复数: z = 3 + 4i a)        real()       复数的实部Real part of complex number b)      

MATLAB学习笔记(十一)&mdash;&mdash;MATLAB图形用户界面设计

(一)菜单设计 一.建立用户菜单 1.概况: 用户菜单一般含有一级菜单和二级菜单,乃至多级菜单.每一级菜单又包含多个菜单项.建立菜单可以使用uimenu函数. 2.uimenu函数调用: %建立一级菜单的函数调用: 一级菜单句柄=uimenu(图形窗口句柄,属性名1,属性值1,属性名2,属性值2,--); %建立一级菜单需给出图形窗口的句柄值. %如果省略句柄值,MATLAB就在当前图形窗口中建立这个菜单项. %如果当前没有图形窗口,则自动打开一个图形窗口. %建立子菜单项的函数调用: 子菜单项