一个二元实数标量对 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)可以用平面上的点来表示,一个二元实数标量数组 [ ( x 1 , y 1 ) 、 ( x 2 , y 2 ) . . . ( x n , y n ) ] [(x_1,y_1)、(x_2,y_2)...(x_n,y_n)] [(x1,y1)、(x2,y2)...(xn,yn)]可以用平面上的一组点来表示
对于离散函数 Y = f ( X ) Y=f(X) Y=f(X),当 X X X为一维标量数组 [ x 1 , x 2 , . . . , x n ] [x_1,x_2,...,x_n] [x1,x2,...,xn]时,根据函数关系可以求出 Y Y Y对应的一维标量 [ y 1 , y 2 , . . . , y n ] [y_1,y_2,...,y_n] [y1,y2,...,yn]
当把上述两个向量数组在直角坐标系中用点序列来表示时,就实现离散函数的可视化
在 M A T L A B MATLAB MATLAB中无法画出真正的连续函数,在实现连续函数的可视化时,首先必须将连续函数用在一组离散自变量上计算函数结果,然后把自变量数组和结果数组在图形中表示出来
为了更形象地表现函数的规律及其连续变化,通常采用以下两种方法:
(1)对离散区间进行更细的划分,直到达到视觉上的连续效果
(2)把每两个离散点用直线连接,以每两个离散点之间的直线来近似表示两点间的函数特性
利用 M A T L A B MATLAB MATLAB绘图大致分为如下7个步骤“
(1)数据准备,根据自变量计算出相应的函数值
(2)选定图形窗口及子图位置,默认情况下,绘制图形为figure.1、figure.2......
(3)调用绘图函数,例如plot函数
(4)设置坐标轴的范围、刻度及坐标网格
(5)设置线性、标记类型及其大小等
(6)添加图形注释,例如 图名、坐标名称、图例、文字说明等
(7)图形的导出和打印
M A T L A B MATLAB MATLAB基本的二维图形包括线型( L i n e P l o t s Line\ Plots Line Plots)、散点型( S c a t t e r P l o t s Scatter\ Plots Scatter Plots)、条型( B a r P l o t s Bar\ Plots Bar Plots)、极坐标型( P o l a r P l o t s Polar\ Plots Polar Plots)及矢量图型( V e c t o r P l o t s Vector\ Plots Vector Plots)等
(1)
p
l
o
t
(
x
,
y
)
plot(x,y)
plot(x,y)
以
x
x
x为横坐标,
y
y
y为纵坐标,按照坐标
(
x
i
,
y
i
)
(x_i,y_i)
(xi,yi)的有序排列绘制曲线
(2)
p
l
o
t
(
y
)
plot(y)
plot(y)
其中
y
y
y为一维实数数组,以
1
:
n
1:n
1:n为横坐标(
n
n
n为
y
y
y的长度),
y
i
y_i
yi为纵坐标,绘制曲线
(3)
p
l
o
t
(
z
)
plot(z)
plot(z)
其中
z
z
z为一维复数数组,以横轴为实轴,以纵轴为虚轴,在复平面上绘制
(
r
e
a
l
(
z
j
)
,
i
m
a
g
(
z
j
)
)
(real(z_j),imag(z_j))
(real(zj),imag(zj))的有序集合的图形
(4)
p
l
o
t
(
A
)
plot(A)
plot(A)
A
A
A为矩阵,绘制矩阵
A
A
A的列对它下标的图形,对于
m
×
n
m\times n
m×n的矩阵,可以绘制出
n
n
n条有
m
m
m个点的曲线,且这
n
n
n条曲线均采用颜色监视器上不同的颜色绘制而成
以第一列为例,所对应的点对为:(1,16),(2,5),(3,9),(4,4)
(5)
p
l
o
t
(
x
,
A
)
plot(x,A)
plot(x,A)
A
A
A为
m
×
n
m\times n
m×n的矩阵,若
x
x
x是为长度为
m
m
m的向量,则绘制矩阵
A
A
A的列对向量
x
x
x的图形;若
x
x
x是为长度为
n
n
n的向量,则绘制矩阵
A
A
A的行对向量
x
x
x的图形
若 m = = n m==n m==n,则将 X X X长度视作 m m m
当X长度为m,绘制n条含m个点的曲线,例如(1,1),(2,4)(3,7),(4,10)
此时的m==n,将X长度视作m,处理同上
当X长度为n,绘制m条含n个点的曲线,例如(1,1),(2,2),(3,3)
(6)
p
l
o
t
(
A
,
x
)
plot(A,x)
plot(A,x)
A
A
A为
m
×
n
m\times n
m×n的矩阵,若
x
x
x是为长度为
m
m
m的向量,则对矩阵
A
A
A的列向量绘制
x
x
x的图形;若
x
x
x是为长度为
n
n
n的向量,则对矩阵
A
A
A的行向量绘制
x
x
x的图形
与 p l o t ( x , A ) plot(x,A) plot(x,A)的区别仅在于交换了横纵坐标的值
当X长度为m,绘制n条含m个点的曲线,例如(1,1),(4,2)(7,3),(10,4)
当X长度为n,绘制m条含n个点的曲线,例如(1,1),(2,2),(3,3)
(7)
p
l
o
t
(
A
,
B
)
plot(A,B)
plot(A,B)
对矩阵
A
A
A的行绘制矩阵
B
B
B的列的图形,如果
A
A
A和
B
B
B都是
m
×
n
m\times n
m×n的矩阵,则将绘制
n
n
n条由
m
m
m个有序对连成的曲线
以A的列作为横坐标向量,B的对应列作为纵坐标向量,例如(2,1),(3,2),(4,3),(5,4),(6,5)
//后续有重复内容
(8)
p
l
o
t
(
x
,
y
,
s
t
r
)
plot(x,y,str)
plot(x,y,str)
以字符串
s
t
r
str
str指定颜色和线型对
y
y
y绘制
x
x
x的图形
(9)
p
l
o
t
(
x
1
,
y
1
,
s
t
r
1
,
x
2
,
y
2
,
s
t
r
2
,
.
.
.
)
plot(x1,y1,str1,x2,y2,str2,...)
plot(x1,y1,str1,x2,y2,str2,...)
以字符串
s
t
r
1
str1
str1指定颜色和线型对
y
1
y1
y1绘制
x
1
x1
x1的图形,以字符串
s
t
r
2
str2
str2指定颜色和线型对
y
2
y2
y2绘制
x
2
x2
x2的图形
添加格栅可以对具体数值有更加清楚的展示
grid on 命令可以在当前图形的单位标记出添加格栅
grid off命令可以取消格栅的显示
通常,曲线所表示的函数或数据的规律都需要进行一些文字的说明或标注
窗口中的文本操作指令如下:
title('text') 在图形窗口顶端的中间位置输出字符串"text"作为标题
xlabel('text') 在x轴下的中间位置输出字符串"text"作为标注
ylabel('text') 在y轴边上的中间位置输出字符串"text"作为标注
zlabel('text') 在z轴边上的中间位置输出字符串"text"作为标注
text(x,y,'text') 在图形窗口的(x,y)处写字符串"text"
若x和y是长度相同的向量,字符串写在(x_i,y_i)的位置上
若"text"是一个字符串矩阵,即字符矩阵,且与行数与xy的长度相同,则第i行的字符串写在位置(x_i,y_i)
text(x,y,'text','sc')
lengend(str1,str2,..pos) 在当前图形上输出图例(说明每条曲线对应的名字),以str1、str2等做标注,pos为位置参数,用于控制图例框的位置
但也可以直接插入图例,鼠标移动位置并双击编辑
lengendoff 从当前图形中清除图例
M
A
T
L
A
B
MATLAB
MATLAB中的字符串可以对输出的文字风格、字体及大小进行预设,可以进行上下标的表示,还可以输出数学公式中经常使用的希腊字符和其他特殊字符
当同一张图形中同时画了多条曲线时,需要使用不同的线型、标记或颜色来区分不同的曲线
(1)表示属性的符号必须放在一个字符串中
(2)可同时指定多个属性,如同时指定线型、标记和颜色
(3)与属性先后顺序无关
(4)在一个字符串中不可重复指定某个属性
1.线型
MATLAB中有5种不同的线型
2.标记
MATLAB中共有14中不同的标记方式
3.颜色
MATLAB中有代号的颜色共有8种,但还有一种叫作颜色映像的数据结构来代表颜色值
颜色映像定义为一个有3列和若干行的矩阵,每一行都代表一种由RGB值形成的颜色,MATLAB中有10个函数可以产生预定的颜色映像
图形坐标轴的取值范围及其刻度对图形的显示效果有着很明显的影响。
在默认情况下,MATLAB通过内部自适应设置来选择坐标轴,但默认设置生成的图形往往达不到用户所要求的效果,或者用户只对图形中某一部分感兴趣时,就需要通过坐标轴控制函数,有针对地调整和设置坐标轴的某些参数
hold on 语句 使当前轴及图形保留下来而不被刷新,并接收即将绘制的新的曲线
hold off 语句 不保留当前轴及图形,绘制新的曲线后,原图即被刷新
hold 语句 实现hold on与hold off的切换
MATLAB允许用户在一个图形窗中同时绘制多幅相互独立的子图
(1)子图之间相互独立,绘图指令只作用于对应子图
(2)在使用subplot后,若再想绘制充满整个图形窗的图时,要先使用clf指令对图窗进行清空
subplot(m,n,k) 将(m*n)幅子图中的第k幅图作为当前曲线的绘制图,左上为第一幅子图,向右后向下依次排号,子图分隔与占位按照默认值自动进行
subplot('position',[left,bottom,width,height]) 由用户指定子图位置,左下角坐标为(0,0),图形窗的宽、高取值范围为[0,1]
MATLAB中设置了相应的鼠标操作的图形操作指令,分别为ginput、gtext和zoom函数
(1)ginput函数只能应用于二维图形,其余两个函数对二维三维均适用
(2)ginput函数和zoom函数配合使用,可以从图形中获得较为准确的数据
(3)在逻辑顺序不清晰的情况下,不建议这几个指令同时使用
1.[X,Y]=ginput(n)——获取绘图框内n个点的坐标
2.gtext(arg)——将文本插入到绘图框的任意位置
若arg是单个字符串,单击位置即可插入;
若arg包含多行字符串,每次单击可以放置其中的一行字符串在图形中,直到所有行的字符串放置完成
3.zoom——放缩已绘制图形
在实际的应用中,常常需要把同一自变量的两个不同量纲、不同量级的函数量的变化同时绘制在同一个图窗中,例如不同时间内降雨量和温湿度的变化
函数plotyy可以实现上述功能,其具体的句法格式如下:
plotyy(X1,Y1,X2,Y2) 以左、右不同的纵轴分别绘制X1-Y1和X2-Y2两条曲线
plotyy(X1,Y1,X2,Y2,Fun) 以左、右不同的纵轴以Fun指定的形式分别绘制X1-Y1和X2-Y2两条曲线
plotyy(X1,Y1,X2,Y2,Fun1,Fun2) 以左、右不同的纵轴分别以Fun1、Fun2指定的形式绘制X1-Y1和X2-Y2两条曲线
左侧的纵轴用来描述X1-Y1曲线,右侧的纵轴用来描述X2-Y2曲线,轴的范围和刻度值都是自动生成,进行人工设置时使用的绘图指令与一般的绘图指令相同
plot只能将用户指定的或者计算而得的数据转换为图形,但如果自变量的离散间隔不合理,就无法反映函数的变化趋势
fplot指令可以通过MATLAB内部设置的自适应算法来动态决定自变量的离散间隔,主要用来根据函数表达式和自变量所属区间来直接绘制函数曲线,不需要给出像plot需要给出的自变量和因变量的数组,因此当函数表达式已知的情况,使用fplot绘制函数曲线相对简单一些
当函数值变化缓慢时,离散间隔取大一些
当函数值变化剧烈时,离散间隔取小一些
其具体语法如下:
fplot(fun,limits) 在limits定义的自变量的取值范围[xmin,xmax]内,或者在自变量与因变量的取值范围[xmin,xmax;ymin,ymax]内,绘制fun函数
limits默认为[-5,5]
fplot(fun,limits,LineSpec) 在limits定义的取值范围内,在LineSpec所规定的线型、颜色、标记等属性下,绘制fun函数
fplot(fun,limits,tol) 在limits定义的取值范围内,在tol所规定的相对误差允许范围内,绘制fun函数,tol默认值为2e-3
fplot(fun,limits,tol,LineSpec) 上述集合
fplot(fun,limits,n) 在limits定义的取值范围内绘制fun函数,至少绘制n+1个点
n默认值为1,即至少绘制两个点,设置n后,最大步长限制为(xmax-xmin)/n
ezplot指令用于绘制函数在某一自变量区域的图形,与fplot指令相同的是,ezplot指令也需要对自变量的范围进行规定
其具体句法格式如下:
ezplot(fun) 按默认自变量范围(-2*pi,2*pi)绘制函数fun
ezplot(fun,[min,max]) 设置x方向的变化范围为[min,max],绘制函数fun
ezplot(fun,[xmin,xmax,ymin,ymax]) x方向变量范围为[xmin,xmax],y方向变量范围为[ymin,ymax]
设fun2(x,y)为隐函数
ezplot(fun2) 绘制fun2(x,y)=0,x、y默认取值范围均为[-2*pi,2*pi]
ezplot(fun2,[xymin,xymax]) x、y范围为[xymin,xymax]
ezplot(fun2,[xmin,xmax,ymin,ymax]) xmin
在实际的很多的情况中,数据都出现指数型的变化规律,如果此时再用线型刻度来描述曲线,则处于低次幂的部分数据无法清晰地表现出来
1.semilogx函数 (x轴对数坐标)
semilogx函数绘制图形型,x轴采用对数坐标,其使用的句法格式与plot基本相同
若未指定线条颜色,semilogx函数将自动使用由当前的ColorOrder和LineStyleOrder属性所指定的颜色顺序和线型顺序来绘制线条
2.semilogy函数(y轴对数坐标)
与上类似
3.loglog函数(x轴y轴均为对数坐标)
与上类似
1.bar函数与barh函数(二维条形图)
二维条形体有两种图型:垂直型(bar函数)与水平型(barh函数)
每种图型又有两种表现模式:累计式与分组式
以bar函数为例说明调用方式:
bar(y) 为每一个y中的元素话一个条状
bar(x,y) 在指定的横坐标x上画出y,其中x为严格单增的向量
若y为矩阵,则bar把矩阵分解为几个行向量,在指定的横坐标处分别画出
bar(...,'bar_color') “bar_color”定义条的颜色
bar(axes_handle,...) 将图形绘制到坐标轴句柄axes_handle中,而不是当前坐标轴句柄中
2.pie函数(饼形图)
其调用格式如下:
pie(x) 绘制参数x的饼形图,若sum(x)>1,按比重分块;若sum(x)<=1,按实际值分块,可能会有空白
pie(x,explode) explode是与x同维的矩阵,若其中有非零元素,x矩阵中相应位置的元素在饼图中对应的扇形将向外移出一些,加以突出
pie(...,labels) labels用于定义相应块的标签
pie(axes_handle,...) 将图形绘制到坐标轴句柄axes_handle中,而不是当前的坐标轴句柄中
h=pie(...) 返回绘制的饼图相关的句柄
3.hist函数(二维直方图)
hist函数用于绘制二维直方图,可以显示出数据的分布情况
所有向量y中的元素或者矩阵Y的列向量中的元素是根据它们的数值范围来分组的,每一组作为一个条形进行显示
直方图的x轴反映了数据y中元素数值的范围,y轴显示出数据y中元素落入该组的数目
其调用形式如下:
n=hist(y) 把向量y中的元素放入等距的10个条形中,且返回每一个条形中的元素的个数,若y为矩阵,则该命令按列对y进行处理
n=hist(y,x) x为向量,把y中元素放到m( m=length(x) )个由x中元素指定的位置为中心的条形中
n=hist(y,nbins) nbins为标量,用于指定条形的数目
[n,xout]=hist(...) 返回向量n与包含频率计数与条形的位置向量,用户可以用命令bar(xout,n)画出条形直方图
hist(axes_handle,...) 将图形绘制到坐标轴句柄axes_handle上,而不是当前坐标轴句柄中
4.scatter函数(散点图)
其调用形式如下:
scatter(x,y) 以x、y的值为横、纵坐标,绘制散点
与plot函数绘制结果一致
plot3指令与plot指令类似,其具体句法格式如下:
plot3(X,Y,Z) X、Y、Z为同维向量时,绘制以X、Y、Z为x、y、z坐标的三维曲线
X、Y、Z为同维矩阵时,用X、Y、Z对应列元素绘制x、y、z坐标的三维曲线,曲线的条数为矩阵的列数
plot3(X1,Y1,Z1,X2,Y2,Z2) 绘制以X1、Y1、Z1和X2、Y2、Z2为x、y、z坐标的三维曲线
plot3(X,Y,Z,'PropertyName',PropertyValue,...) 在PropertyName所规定的曲线属性下,绘制以X、Y、Z为x、y、z坐标的三维曲线
三维网格图和曲面图的绘制比三维曲线图更复杂,主要是因为绘图数据的准备及三维图形的色彩、明暗、光照和视角等的处理
1.确定自变量x和y的取值范围和取值间隔
x=x1:dx:x2,y=y1:dy:y2
2.构成xoy平面上的自变量采样“格点”矩阵
meshgrid用法如下:
[X,Y]=meshgrid(x,y) 基于向量x和y中包含的坐标返回二维网格坐标
X与Y的维数相同的矩阵,均为length(y)行,length(x)列
X每一行是x的一个副本,共length(y)行
Y每一列是y的一个副本,共length(x)列
[X,Y]=meshgrid(x) 等同于[X,Y]=meshgrid(x,x)
[X,Y,Z]=meshgrid(x,y,z) 返回由向量x、y和z定义的三维网格坐标
X、Y和Z的大小为length(x)*length(y)*length(z)
[X,Y,Z]=meshgrid(x) 等同于[X,Y,Z]=meshgrid(x,x,x)
得到了xoy平面上的自变量采样“格点”矩阵,由于两个矩阵相互对应,可以直接从矩阵上遍历点计算出每个位置的Z值,绘制出三维图形
x=x1:dx:x2,y=y1:dy:y2
[X1,Y1]=meshgrid(x,y);%利用meshgrid指令直接生成“格点”矩阵
X2=ones(size(y))*x;Y2=y*ones(size(x));%利用“格点”矩阵的原理生成矩阵
3.计算在自变量采样“格点”上的函数值:Z=f(X,Y)
[X,Y] = meshgrid(-8:.5:8);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R)./R;
4.利用mesh指令绘制图形
基本的mesh指令的句法格式如下:
mesh(X,Y,Z) 以X为x轴自变量,Y为y轴自变量,绘制网格图;
若X和Y均为向量,且size(Z)=[length(Y),length(X)],空间中点的坐标为(X(j),Y(i),Z(i,j))
若X和Y是矩阵,则空间中点的坐标为(X(i,j),Y(i,j),Z(i,j))
mesh() 若Z矩阵的列长为n,行长为m,则X=1:n,Y=1:m
mesh(X,Y,Z,C) C用于定义颜色,如果不定义C则颜色根据Z值(曲面高度而变化)
mesh(X,Y,Z,'PropertyName',PropertyValue,...) 与之前功能一致
该指令的调用格式与mesh指令类似
mesh指令所绘制的是网格划分的曲面图
surf指令绘制得到的是平滑着色的三维曲面图
着色方式是在得到相应的网格点后,对每一个网格依据该网格所代表的节点的色值(由变量C控制)来定义这一网格的颜色
光照是一种利用方向光源来照亮物体的技术
在某些情况下,这项技术能使表面微妙的差异更容易看到,光照也可以增强三维图像的现实感
1.使用surf指令
2.surfl指令
为了方便测试立体绘图,MATLAB提供了一个peaks函数,可产生一个凹凸有致的曲面,包含了三个局部极大点及三个局部极小点
shading interp作用:对曲面或图形对象的颜色着色进行色彩的插值处理,使色彩平滑过渡
绘制等值线图需要用到contour指令,其调用格式如下:
contour(Z) 以Z矩阵的列下标为x轴自变量、行下标为y轴自变量,绘制等值线图
contour(Z,n) n为所绘制的图形等值线的条数
contour(Z,v) v为向量,向量长度为等值线的条数,并且等值线的值为对应的向量的元素值
contour(X,Y,Z) 以X为x轴自变量、Y为y轴自变量,绘制等值线
XY均为向量,若X、Y长度分别为m、n,则Z为m*n的矩阵,即[m,n]]=size(Z),网格线的顶点为(X(j),Y(i),Z(i,j))
用颜色来描述不受3个轴影响的数据的某些属性,即第四维的数据
如果作图函数的颜色参量是一个向量或矩阵,那么就用作颜色映像的下标,这个参量可以是任何实向量或与其参量维数相同的矩阵
右图第四维数据为R,以不同的颜色表现出来