1. 图形绘制基础
1.1 离散数据及离散函数
一个二元实数标量对 ( 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 1 , x 2 , x 3 , … , x n ] [x_1, x_2, x_3, …, xn_] [x1,x2,x3,…,xn]时,根据函数关系可以求出相应的一维标量 [ y 1 , y 2 , y 3 , … , y n ] [y_1, y_2, y_3, …, y_n] [y1,y2,y3,…,yn]。当把这两个向量数组在直角坐标系中用点序列来表示时,就实现了离散函数的可视化。
%表示离散函数y=sin(x)
>> x=0:0.1:12;
>> y=sin(x);
>> plot(x,y,'r*','markersize',15)
>> grid on
>> plot(x,y)
>> plot(x,y,'r-.*')
将离散的数据对用特定的标识和颜色显示出来
1.2 连续函数
MATLAB中无法画出真正的连续函数,因此在实现连续函数的可视化时,首先必须将连续函数用在一组离散自变量上计算函数结果,然后将自变量数组和结果数组在图形中表示出来。
这些离散的点还是不能表现函数的连续性,为了更形象地表现函数的规律及其连续变化,通常采用以下两种方法
1)对离散区间进行更细的划分,逐步趋近函数的连续变化特性,直到达到视觉上的连续效果。
2)把每两个离散点用直线连接,以每两个离散点之间的直线来近似表示两点间的函数特性。
%绘制正弦函数曲线
>> x=1:0.1:10;
>> y=sin(x);
>> plot(x,y)
1.3 图形绘制的基本步骤
1)曲线数据准备。
对于二维曲线,需要准备横坐标和纵坐标数据;对于三维曲面,需要准备矩形参变量和对应的Z坐标轴。
2)指定图形窗口和子图位置
可以使用 f i g u r e figure figure命令指定图形窗口,默认时打开 F i g u r e 1 Figure 1 Figure1窗口,或使用 s u b p l o t 命 令 subplot命令 subplot命令指定当前子图(即在大图中的小图)。
3)调入绘图命令绘制图形。
根据数据绘制曲线后,设置曲线的绘制方式包括线型、色彩、数据点标记形状等
4)设置坐标轴的图形注释。
设置坐标轴包括坐标的范围、刻度和坐标分格线等,图形注释包括图名、坐标名、图例、文字说明等。
5)按指定格式保存或导出图形。
将绘制的图形窗口保存为 . f i g .fig .fig文件,或转换成其他图形文件。
其中步骤1到步骤3是最基本的绘图步骤,如果利用MATLAB的默认设置通常只需要这3个基本步骤就可以绘制出图形。
%图形绘制实例
>> x=0:0.02:5;
>> y=sin(x.*x);
>> plot(x,y)
2. 二维图形绘制
2.1 p l o t plot plot 指令
p l o t plot plot是最基本的二维绘图命令,在二维绘图中只要输入 p l o t ( a , b ) plot(a, b) plot(a,b)这个命令,就可以画出一个以 a a a为 x x x轴、 b b b为 y y y轴的图形
2.1.1 plot(x)
该命令中的x可以是向量、实数矩阵或复数矩阵。
若x为实向量,则以x元素值为纵坐标,以相应元素下标为横坐标值,以直线段顺序连接各点;
若x为复数向量,则以x元素值的实部为横坐标,虚部值为纵坐标,在坐标系中得到的所有点以直线段顺序连接;
若x为实数阵,则按列绘制每列元素值相对其下标的连线图,同时绘制出多条曲线,条数等于x阵的列数;
若 x x x为复数阵,则分别以 x x x实部阵和虚部阵的对应列元素为横纵坐标绘制多条连线图
2.1.2 p l o t ( x 1 , y 1 , x 2 , y 2 , … ) plot(x1, y1, x2, y2, …) plot(x1,y1,x2,y2,…)
每个二元对(即 x 1 x_1 x1和 y 1 y_1 y1, x 2 x_2 x2和 y 2 y_2 y2, …)之间的作用与 p l o t ( x , y ) plot (x, y) plot(x,y)相同,不同二元对之间没有约束关系。
2.1.3 p l o t ( x , y ) plot(x, y) plot(x,y)
若 x 、 y x、y x、y是同维向量,则绘制以 x 、 y x、y x、y元素为横纵坐标的连线图;
若 x x x是向量, y y y是一个与 x x x等维的矩阵,则绘制出多条不同色彩的连线图,条数等于y阵的另一个维数;
若 x 、 y x、y x、y是等维矩阵,则以 x 、 y x、y x、y对应列元素为横纵坐标分别绘制曲线,曲线的条数等于矩阵的行数。
>> clear
>> x=0:0.05:5;
>> y1=0.2*x-0.8;
>> y2=sin(x.^2);
>> figure
>> plot(x,y1,x,y2)
2.2 格栅—— g r i d o n / o f f grid on/off gridon/off
g r i d o n grid on gridon命令可以在当前图形的单位标记处添加格栅
g r i d o f f grid off gridoff命令可以取消格栅的显示
单独使用 g r i d grid grid命令则可以在 o n on on与 o f f off off状态下交替转换,即起到触发的作用
2.3 文字说明—— t e x t ( ) text() text()
MATLAB中的文字说明主要包括以下几种。
1)添加图形标题命令 t i t l e title title。
格式一: t i t l e ( ′ s t r i n g ′ ) 。 title('string')。 title(′string′)。
功能:在当前坐标系的顶部加一个文本串string,作为该图形的标题。
格式二: t i t l e ( ′ t e x t ′ , ′ p r o p e r t y N a m e ′ , ′ p r o p e r t y V a l u e ′ , … ) 。 title('text', 'property Name', 'property Value', …)。 title(′text′,′propertyName′,′propertyValue′,…)。
功能: ′ p r o p e r t y N a m e ′ 、 ′ p r o p e r t y V a l u e ’ 'property Name'、'property Value’ ′propertyName′、′propertyValue’用于设置标题名属性,包括字体大小、字体名和字体粗细等。
2)添加坐标轴标志函数 x l a b e l , y l a b e l , z l a b e l 。 xlabel, ylabel, zlabel。 xlabel,ylabel,zlabel。
格式一: x l a b e l ( ′ t e x t ′ ) 或 y l a b e l ( ′ t e x t ′ ) 或 z l a b e l ( ′ t e x t ′ ) 。 xlabel('text')或ylabel('text') 或zlabel('text')。 xlabel(′text′)或ylabel(′text′)或zlabel(′text′)。
功能:给当前 x x x轴或 y y y轴或 z z z轴标注文本标注。
格式二: x l a b e l ( ′ t e x t ′ , ′ p r o p e r t y 1 ′ , p r o p e r t y v a l u e 1 , ′ p r o p e r t y 2 ′ , p r o p e r t y v a l u e 2 , … ) 或 y l a b e l ( ′ t e x t ′ , ′ p r o p e r t y 1 ′ , p r o p e r t y v a l u e 1 , ′ p r o p e r t y 2 ′ , p r o p e r t y v a l u e 2 , … ) 或 z l a b e l ( ′ t e x t ′ , ′ p r o p e r t y 1 ′ , p r o p e r t y v a l u e 1 , ′ p r o p e r t y 2 ′ , p r o p e r t y v a l u e 2 , … ) 。 xlabel('text', 'property1', property value1,'property2', property value2, …)或ylabel('text', 'property1',property value1, 'property2', property value2, …) 或zlabel('text', 'property1', property value1, 'property2',property value2, …)。 xlabel(′text′,′property1′,propertyvalue1,′property2′,propertyvalue2,…)或ylabel(′text′,′property1′,propertyvalue1,′property2′,propertyvalue2,…)或zlabel(′text′,′property1′,propertyvalue1,′property2′,propertyvalue2,…)。
功能:对 x x x轴、 y y y轴、 z z z轴分别进行属性设置,包括字体大小、字体名和字体粗细等。
3)图形标注函数 l e g e n d legend legend
格式一: l e g e n d ( s t r i n g 1 , s t r i n g 2 , s t r i n g 3 , … ) legend(string1, string2, string3, …) legend(string1,string2,string3,…)
功能:在当前图中添加图例。
格式二: l e g e n d o f f legend off legendoff
功能:撤销当前坐标图上的图例。
4)文本注释函数 t e x t , g t e x t text, gtext text,gtext
格式一: t e x t ( X , Y , ′ s t r i n g ′ ) text(X, Y, 'string') text(X,Y,′string′)。
功能:在二维图形 ( X , Y ) (X, Y) (X,Y)位置处标注文本注释 ’ s t r i n g ′ ’string' ’string′。
格式二:text ( X , Y , Z , ′ s t r i n g ′ ) (X, Y, Z, 'string') (X,Y,Z,′string′)。
功能:在三维图形中 ( X , Y , Z ) (X, Y, Z) (X,Y,Z)位置处标注文本注释 ’ s t r i n g ′ ’string' ’string′。
格式三: g t e x t ( ′ s t r i n g ′ ) gtext('string') gtext(′string′)。
功能:用鼠标拖动来确定标注文字 ’ s t r i n g ’ ’string’ ’string’的位置,用起来比较方便
2.4 线型、标记和颜色
plot(x,y,'string')
2.5 坐标轴控制
2.6 图形叠绘——hold on/off
在实际应用中会遇到在已经存在的图上再绘制一条或多条曲线的情况。为此,MATLAB提供了以下指令:
h o l d o n hold on holdon,使当前轴及图形保持而不被刷新,准备接受此后将绘制的新曲线;
h o l d o f f hold off holdoff,使当前轴及图形不再具备不被刷新的性质;
h o l d hold hold,当前图形是否具备刷新性质的双向切换开关。
2.7 绘制子图—— s u b p l o t ( 2 , 2 , 1 ) subplot(2,2,1) subplot(2,2,1)
s u b p l o t ( m , n , k ) 。 subplot(m, n, k)。 subplot(m,n,k)。
s u b p l o t ( m , n , k ) subplot(m, n, k) subplot(m,n,k)的含义:图形窗口中将有 ( m × n ) (m×n) (m×n)幅子图,k是子图的编号,使 ( m × n ) (m×n) (m×n)幅子图中的第k幅成为当前图,子图的序号编排原则是左上方为第1幅,向右向下依次排号。
2.8 双坐标轴绘图—— p l o t y y ( ) plotyy() plotyy()函数
用户在实际应用中常常有这样一种需求:把同一自变量的两个不同量纲、不同数量级的函数量的变化绘制在同一张图上。为了满足这一需要,MATLAB提供了以下指令。
-
P l o t y y ( x 1 , y 1 , x 2 , y 2 ) Plotyy(x_1, y_1, x_2, y_2) Plotyy(x1,y1,x2,y2),以左、右不同纵轴绘制 x 1 , y 1 , x 2 , y 2 x_1, y_1, x_2, y_2 x1,y1,x2,y2两条曲线;
-
P l o t y y ( x 1 , y 1 , x 2 , y 2 , F U N ) Plotyy(x_1, y_1, x_2, y_2, FUN) Plotyy(x1,y1,x2,y2,FUN),以左、右不同纵轴把 x 1 , y 1 , x 2 , y 2 x_1, y_1, x_2, y_2 x1,y1,x2,y2绘制成 F U N FUN FUN指定形式的两条曲线;
-
P l o t y y ( x 1 , y 1 , x 2 , y 2 , F U N 1 , F U N 2 ) Plotyy(x_1, y_1, x_2, y_2, {FUN}_1, FUN_2) Plotyy(x1,y1,x2,y2,FUN1,FUN2),以左、右不同纵轴把 x 1 , y 1 , x 2 , y 2 x_1,y_1, x_2, y_2 x1,y1,x2,y2绘制成 F U N FUN FUN指定形式的两条曲线。
2.9 f p l o t ( f u n , l i m i t ) fplot(fun,limit) fplot(fun,limit)函数
f p l o t fplot fplot指令可以很好地解决这个问题。该指令通过MATLAB内部设置的自适应算法来动态决定自变量的离散间隔,当函数值变化缓慢时,离散间隔取大一些;当函数值变化剧烈时,离散间隔取小一些。 f p l o t fplot fplot指令的具体句法格式如下
- f p l o t ( f u n , l i m i t s ) fplot(fun, limits) fplot(fun,limits):在 l i m i t s limits limits定义的自变量取值范围 [ x m i n , x m a x ] [xmin,xmax] [xmin,xmax]内,或者在自变量与因变量的取值范围 [ x m i n , x m a x ; y m i n , y m a x ] [x_{min}, x_{max}; y_{min},y_{max}] [xmin,xmax;ymin,ymax]内,绘制 f u n fun fun函数。
+$ fplot(fun, limits, linespec) : 在 :在 :在limits 定 义 的 取 值 范 围 内 , 在 定义的取值范围内,在 定义的取值范围内,在linespec 所 规 定 的 线 型 、 颜 色 、 标 记 等 属 性 下 , 绘 制 所规定的线型、颜色、标记等属性下,绘制 所规定的线型、颜色、标记等属性下,绘制fun$函数。
-
f p l o t ( f u n , l i m i t s , t o l ) fplot(fun, limits, tol) fplot(fun,limits,tol):在 l i m i t s limits limits定义的取值范围内,在 l i n e s p e c linespec linespec所规定的线型、颜色、标记等属性下,在 t o l tol tol所规定的相对误差允许范围内,绘制 f u n fun fun函数。
-
f p l o t ( f u n , l i m i t s , n ) fplot(fun, limits, n) fplot(fun,limits,n):在 l i m i t s limits limits定义的取值范围内绘制 f u n fun fun函数,至少绘制 n + 1 n+1 n+1个点。
对比图11.18中的4幅图形可看出,绘图的数据点是自适应产生的。在函数平坦处,所取数据点比较稀疏;在函数变化剧烈处,将自动取较密的数据点。
2.10 e z p l o t ezplot ezplot绘图指令
e z p l o t ezplot ezplot指令用于绘制函数在某一自变量区域内的图形。该函数的英文意思是$ Easy-to-use function plotter$,即无须数据准备,直接画出函数图形。
基本调用格式为 e z p l o t ( f ) ezplot(f) ezplot(f),其中 f f f **是字符串或代表数学函数的符号表达式,只有一个符号变量。**因为形如 f ( x , y ) = 0 f(x, y)=0 f(x,y)=0的隐函数不能转换成像 y = f ( x ) y=f(x) y=f(x)的函数的图形,所以 p l o t plot plot和 f p l o t fplot fplot都无法画出。
-
e z p l o t ( f , [ m i n , m a x ] ) ezplot(f, [min, max]) ezplot(f,[min,max]):设置 x x x方向的变量范围为 [ m i n , m a x ] , y [min, max], y [min,max],y方向按MATLAB默认方式绘制函数。
-
e z p l o t ( f , [ x m i n , x m a x , y m i n , y m a x ] ) ezplot(f, [xmin, xmax, ymin, ymax]) ezplot(f,[xmin,xmax,ymin,ymax]):设置 x x x方向的变量范围为 [ m i n , m a x ] [min, max] [min,max], y y y方向的变量范围为 [ y m i n , y m a x ] [ymin, ymax] [ymin,ymax]绘制函数。
-
e z p l o t ( x , y ) ezplot(x, y) ezplot(x,y):按MATLAB默认方式(自变量范围为 − 2 π < x < 2 π -2π<x<2π −2π<x<2π)绘制函数 x , y x, y x,y。
-
e z p l o t ( x , y , [ m i n , m a x ] ) ezplot(x, y, [min, max]) ezplot(x,y,[min,max]):按自变量范围为 [ m i n , m a x ] [min, max] [min,max]绘制函数函数。
>> f=sym('sin(x)^2+4*cos(y)^2=4')
f =
4*cos(y)^2 + sin(x)^2 == 4
>> ezplot(f,[-5 5 -1 1])
>> syms x
>> f=exp(sin(x)^2)
f =
exp(sin(x)^2)
>> ezplot(f,[-2*pi 2*pi])
2.11 特殊坐标轴绘图
2.11.1 对数坐标轴—— s e m i l o g x 、 s e m i l o g y 、 l o g l o g semilogx、semilogy、loglog semilogx、semilogy、loglog
- 格式: s e m i l o g x ( … ) semilogx(…) semilogx(…)
功能:在x轴上采用常用对数进行标定。该命令的调用格式与plot函数的调用格式相同。
- 格式:semilogy(…)。
功能:在 y y y轴上采用常用对数进行标定。该命令的调用格式与 p l o t plot plot函数的调用格式相同。
- 格式: l o g l o g ( … ) loglog(…) loglog(…)
功能:在 x 、 y x、y x、y轴上分别采用常用对数进行标定。该命令的调用格式与 p l o t plot plot函数的调用格式相同
>> t=0.001:0.002:20;
>> y=5+log(t)+t;
>> semilogx(t,y,'b--')
>> hold on
>> semilogx(t,t+5,'b--')
>> hold on
>> semilogx(t,t,'b--')
2.11.2 极坐标函数 p o l a r polar polar
格式一: p o l a r ( θ , ρ ) polar(\theta, \rho) polar(θ,ρ)。
功能:绘制极角为 θ \theta θ、极径为 ρ \rho ρ的极坐标图形。
格式二: p o l a r ( θ , ρ , s ) polar(\theta, \rho, s) polar(θ,ρ,s)。
功能:绘制由 s s s指定样式、颜色的极坐标图形。
>> x=0:0.01:2*pi;
>> polar(x,sin(2*x).*cos(2*x))