资源描述
MATLAB 学习笔记 图形与动画编程(一)
GUI——Graphical User Interfaces 图形用户界面
实现一个GUI的过程包括两个基本任务:一个是GUI的组建布局;一个是GUI组件编程。
在matlab中,GUIDE是一个组建布局工具箱,能够生成用户所需要的组件资源和并保存在一个FIG文件中。
可以这样说,matlab图形界面程序的核心就是句柄图形的应用。句柄图形是一组底层图形函数的名称,这些函数用来在matlab中生成图形,他提供了对图形的高级控制,其基本思想是,matlab中每一个可是部分就是一个对象,每个对象都有一个相应的唯一标示符,即句柄。
MATLAB的二维制图
二维图形的基本绘图命令
Matlab提供了两种级别的二维图形基本绘图命令:
高级绘图命令plot;低级绘图命令line;
plot函数常见语法格式:
1. plot(Y)
2. plot(X,Y)
3. plot(X1,Y1,X2,Y2,...Xn,Yn)
上述命令可以指定线型、颜色、数据点标记类型等属性
需要注意的是,当指定了数据点标记类型,但不指定线型的时候,则表示只标记数据点,而不进行连线绘图。
line函数常见语法格式:
line(X,Y) 将各数据点用线段顺次连接起来,从而绘制一条折线
line(X,Y)中的X,Y可以是一组相关的变量,这样就画出一条折线,如果是不变的点,则line函数画出的是直线
如:
%plot line 应用
x=0:pi/20:2*pi;
y1=sin(x);
y2=sin(x+pi/2);
plot(x,y1,'r:',x,y2,'+')
line([0,7],[0.5,0.5])
line([0,7],[-0.5,-0.5])
legend('y1','y2')
xlabel('x')
ylabel('y')
二维图形的修改
坐标轴的调整:axis函数
1. 调整坐标轴的范围
axis([xmin xmax ymin ymax])
2. 调整坐标轴的状态
axis(str)
此函数的功能是将坐标轴的状态设定为字符串参数str所指定的状态。
参数str是由一对单引号所引起来的字符串(也可以省略这对单引号),它表明了将坐标轴调整为哪一种状态。
常用的字符串命令有:
axis xy 使用笛卡尔坐标系
axis ij 使用matrix坐标系
axis square 将当前图形设置为正方形图形
axis eaual 将x,y坐标轴的单位刻度设为相等
axis normal 关闭Axis square和Axis eaual命令
axis off/on 关闭/打开 网格线
3. 保存坐标轴的范围
variable=axis 变量variable保存一个向量值,这个向量能够以axis的形式应用于设定坐标轴的范围大小
4. 保存坐标轴的状态
[s1,s2,s3]=axis(‘state’)
S1:是否自动设定坐标轴的范围
S2:是否关闭坐标轴
S3:所使用的坐标轴种类
添加或取消网格线:
grid on
grid off
坐标轴的名称:
xlabel
ylabel
图形标题:
title
文字在图形中的显示:
1. 用坐标轴确定文字位置
text(x,y,string,option)
option为坐标单位决定参数,如果不给出该选项参数,则(x,y)坐标的单位和图中的单位一致,如果该参数取为‘sc’则表示规范化窗口的相对坐标,其变化范围为0~1,即窗口的左下角为(0,0),右上角为(1,1)
2. 用鼠标确定文字位置
gtext是交互式文本框标注函数
》gtext(‘string’) 可以在鼠标单击的为位置标注一个单行文本框
》gtext({‘string1’,‘string2’,...}) 可以在鼠标单击的位置标注一个多行文本框
》gtext({‘string1’;‘string2’;...}) 可以通过多次鼠标单击标注多个文本框
图形的图例和颜色条:
》legend(‘string1’,’string2’,...)
添加图例,并设置各组数据的图例文字为对应位置string的字符串
》legend(‘off’) 清除图例
》legend(‘hide’) 隐藏图例
》legend(‘show’) 显示图例
》colorbar 添加颜色条
函数绘图:
自适应采样绘图函数
》fplot(fname,lims,tol,选项)
其中,fname是函数名,以字符串形式出现;lims是x,y的取值范围;tol是相对允许误差,系统默认值为2e-3;选型定义与plot函数相同。
隐函数绘图:
对于f=f(x) :
》ezplot(f) 默认区间-2*pi~2*pi
》ezplot(f,[a,b])
对于f=f(x,y) :
》ezplot(f)
》ezplot(f,[xmin,xmax,ymin,ymax])
对于参数方程x=x(t)和y=y(t) :
》ezplot(x,y)
》ezplot(x,y,[tmin,tmax])
双Y轴绘图应用
》plotyy(X1,Y1,X2,Y2)
绘制Y1对应于X1并具有Y轴标识在左边的图形与绘制Y2对应于X2并具有Y轴标识在右边的图形
》plotyy(X1,Y1,X2,Y2,fun)
其中fun为matlab中的绘图函数,用户必须使用@或单引号去指定每个绘图方式
》[AX,H1,H2]=plotyy(...)
返回建立于AX的两个坐标轴的句柄值和两条曲线的句柄值H1和H2。其中AX(1)是左方的坐标轴,AX(2)是右方的坐标轴,因此通过这两个值就可以设置滚动条等操作
填充图形的绘制
》fill(X1,Y1)
根据X1和Y1的元素绘制图案填充图,X1和Y1必须长度相同
多坐标系绘图与图形窗口分割
图形的叠印:
单独使用hold可以切换当前绘图叠加模式,将当前绘图窗口的叠加模式从on改为off或者从off改为on;hold on 和 hold off 分别明确指定当前绘图窗口叠加绘图模式的开关状态。
子图的绘制:
在一个图形窗口中绘制多幅图的另一种方法是利用子图绘制函数subplot将当前窗口分割成几个区域,然后再在各个区域中分别绘图。
》subplot(m,n,i)
函数表示在当前绘图区中建立m行n列个绘图子区,在编号为i的位置上建立坐标系,并设置该位置为当前绘图区。
DATA CURSOR 工具
在matlab中,用户可以通过绘图工具栏中DATA CURSOR工具来任意查询图面绘图数据。可以建立和删除多个显示方块,也可以将方块中的数据导入到matlab工作区间。
绘制极坐标图形
Matlab提供了基本的极坐标绘图函数polar
》polar(theta,rho)
》polar(theta,rho,LineSpec)
其中,theta表示各数据点的角度向量;rho表示各数据点的幅值向量,需要注意的是theta和rho的长度必须一直;LineSpec是一个选项参数,其含义与plot选项参数的含义相同。
极坐标绘图函数类似于plot,需要注意的是theta和rho也可以是普通的二维数组,但polar不能接受多对参数输入。
特殊二维图形的绘制
阶梯曲线:
》stairs(x,y)
其中,x 和 y 为相同大小的向量或相同大小的矩阵。X可以是行向量或列向量,y是一个有length(x)行的矩阵。
区域图:
区域图将向量或矩阵中的元素显示为一条或多条曲线,并填充每条曲线下面的面积,当为矩阵时,曲线堆栈显示,它的调用格式如下:
》area(y)
如果y为向量,则根据它的值绘图;如果y为矩阵,则根据它的每一列值绘图
》area(x,y)
x、y为向量时,同plot(x,y),绘图区域以面进行填充;当y为矩阵时,以y矩阵每一列元素之和所得向量绘制区域图
概率分布图:
概率分布图用来显示已知数据集的分布情况,已知数据集的数据范围被分割成若干个区间,图中用各个柱条代表处于该区间的数据点数目
》hist(y)
将向量Y的最大值和最小值的差平均分成10等分,然后绘出其分布图
》hist(Y,n)
将向量Y的最大值和最小值的差平均分成n等分,然后绘出其分布图
》hist(Y,X)
以向量X的各个元素值为统计范围,绘出Y的分布图
极坐标下的直方图也成玫瑰图,绘制函数rose,调用格式如下:
》rose(thera)
将向量theta的最大值和最小值平均分成20等分,然后绘制其分布图
》rose(thera,n)
将向量theta的最大值和最小值平均分成n等分,然后绘制其分布图
》rose(thera,x)
以向量x的各个元素值为统计范围,绘制thera分布图
离散点图:
》scatter(A,B,s,c)
在向量A和B指定的位置显示彩色圆圈,A和B必须是长度相同的向量,s确定标记的大小,c确定标记的颜色,s和c可以使标量,也可以是和A,B长度相同的向量。
散点矩阵图:
》plotmatrix(z)
根据z的元素绘制散点矩阵图,z可以是向量或者矩阵。
离散数据绘图:
显示离散数据的变化趋势,还可以用火柴杆图stem
》stem(Y)
以x=1,2,3...为各数据点的x坐标,以Y向量的各个对应元素为y坐标,在(x,y)坐标点画出一个空心的小圆圈,并连接一条线段至x坐标轴
》stem(X,Y)
以向量x的各个元素为x坐标,以Y向量的各个对应元素为y坐标,在(x,y)坐标点画出一个空心的小圆圈,并连接一条线段至x坐标轴
》stem(X,Y , ‘fill’)
以向量x的各个元素为x坐标,以Y向量的各个对应元素为y坐标,在(x,y)坐标点画出一个实心的小圆圈,并连接一条线段至x坐标轴
伪彩色图:
伪彩色图常用于以二维平面图表现三维图形的效果,用颜色表示三维图形的高度
》pcolor(z)
绘制z数据所对应的伪彩色图
误差条图:
》errorbar(x,y,e)
该函数根据x绘制y的误差条图,误差条的长度为2*e(i),x、y和e必须大小相同
向量图:
Matlab中常用的向量图包括罗盘图、羽毛图和向量场图
其中,compass函数可以绘制罗盘图,compass接受直角坐标参数,在绘制出的罗盘图中,每一个数据点被表示为极坐标下一条从原点出发的带箭头的线段。
》compass(U,V)
表示向量起点在原点,向量数目为n,n为U或V中的元素数目,向量终点位置有U(i)或V(i)决定
》compass(Z)
Z表示复数矩阵,向量个数为矩阵元素数,向量终点位置由复数矩阵Z元素决定
》compass(... , LineSpec)
表示向量图设置线的类型、标注及颜色等属性
函数feather用来绘制羽毛图。Feather也接受直角坐标参数,与罗盘图不同的是,羽毛图实在直角坐标系下绘制的,每一个数据点被表示为带箭头的限度,不过其起点是在x轴上间隔单位长度的刻度点。调用格式类似compass
向量场图的绘制函数是quiver,调用个数为quiver(x,y,u,v),表示以(x,y)为起点,用箭头表示(u,v)代表的向量。向量场图也是直角坐标系下的向量图,常用于描绘梯度场。
柱状图:
》bar(Y,option)
以x=1,2,3,...为各数据点的x坐标,以Y向量的各个对应元素为y坐标,画出一个垂直放置的二维图。
》bar(X,Y,option)
以向量X的各个对应元素为x坐标,以Y向量的各个对应元素为y坐标,画出一个垂直放置的二维图。如果x,y为同维数矩阵,则将以x,y的每一个行向量为数据。
》bar(Y,’stack’)
以x=1,2,3,...为各数据点的x坐标,以矩阵Y的各个列向量的累加值为y坐标,画出一个垂直放置的、累加式的二维柱状图。
》bar(Y,’group’)
用法与上一条语句类似。
barh与bar用法相同,只不过前者绘出的是水平放置的二位柱状图。
饼图:
》pie(Y)
若Y为向量值,则该命令绘制出每一个元素占全部向量元素总和的百分比饼图,若Y为矩阵值,则该命令绘制出每一个元素占全部矩阵元素总和值得百分比饼图。
》pie(Y,explode)
参数explode说明是否将某一数据对应的扇形图形从整个饼状图中分离出来,它的维数与Y相同,当它的某一个元素非零时,即表示将对应的扇形从整个饼状图中分离出来。若输入数据Y总和超过1,pie函数会自动计算每一个数据在总体中的比例,而当输入的数据总和小于1时,pie只绘制输入数据指定的各部分,不足1的部分空缺处理。
等高线图:
》contour(Z)
矩阵Z的等高线图,Z的维数至少为2,其等高线数目及值是自动设定的
》contour(Z,n)
绘制矩阵Z的等高线图,n表示等高线的等级数量
带形图:
》ribbon(x,y)
在工作区间直接绘图
Matlab提供了鼠标选取数据点的命令ginput
》[x,y]=ginput
当在图形窗口中按下某个鼠标键或者某一键盘时,读取此时光标所在位置的一系列坐标值,并将这些坐标值存储到向量x和y中,直到按回车键后才终止该存储过程
》[x,y]=ginput(n)
当在图形窗口中按下某个鼠标键或者某一键盘时,读取此时光标所在位置的一系列坐标值,并将这些坐标值存储到向量x和y中,共读取n个数据点
》[x,y,button]=ginput(n)
用鼠标从图形窗口读取n个数据点,并将这些数据点的坐标值存储在向量x和y中,同时还将读数过程中鼠标按键情况或者键盘按键情况记录到向量变量button中
这里需要说明以下问题:
在读取第i个数据点时,若按的是鼠标左键,则button(i)=1;若按的是鼠标中键,则button(i)=2;若按的是鼠标右键,则button(i)=3;若按的是键盘,则button(i)=存储相应键的ASCII码。
该命令仅仅读取了一些数据点,并没有绘制图形。在读取了一些数据点后,就可以利用某种方法或按某种要求把这些数据点连成一起,从而达到手工绘图的效果。
展开阅读全文