MATLAB 之 二维图形绘制的基本函数和辅助操作

  • 二维图形是将平面坐标上的数据点连接起来的平面图形。可以采用不同的坐标系,除直角坐标系外,还可以采用对数坐标、极坐标。数据点可以用向量或矩阵形式给出,类型可以是实型或复型。二维曲形的绘制无疑是其他绘图操作的基础。

一、绘制二维曲线的基本函数

  • 在 MATLAB 中,基本的绘图函数是 plot 函数,利用它可以绘制出不同的二维曲线。

1. plot 函数的基本用法

  • plot 函数用于绘制 x y xy xy 平面上的线性坐标曲线图,因此需提供一组 x x x 坐标及其各点对应的 y y y 坐标,这样就可以绘制分别以 x x x y y y 为横、纵坐标的二维曲线。
  • plot 函数的基本调用格式如下:
    plot(x,y)
  • 其中, x x x y y y 为长度相同的向量,分别用于存储 x x x 坐标和 y y y 坐标数据。
  • 例如,在 0 ≤ x ≤ 2 π 0\le x\le2\pi 0x2π 区间内,我们绘制曲线 y = 2 e − 0.5 x sin ⁡ ( 2 π x ) y=2e^{-0.5x}\sin(2\pi x) y=2e0.5xsin(2πx)
  • 程序如下:
x=0:pi/100:2*pi;
y=2*exp(-0.5*x).*sin(2*pi*x);
plot(x,y)
  • 程序运行后,打开一个图像窗口,在其中绘制函数曲线。

在这里插入图片描述

  • 这里需要注意的是,求 y y y 时,指数函数和正弦函数之间要用点乘运算,由于 2 时标量,所以 2 与指数函数之间可以用乘法运算。这样,向量 x x x 和向量 y y y 所包含的元素个数相等, y ( i ) y(i) y(i) x ( i ) x(i) x(i) 点呃函数值。
  • 例如,我们绘制曲线: { x = t cos ⁡ 3 t y = t sin ⁡ 2 t − π ≤ t ≤ π \left\{\begin{matrix}x=t\cos 3t \\y=t\sin^{2} t \end{matrix}\right. \begin{matrix} -\pi \le t\le \pi \end{matrix} { x=tcos3ty=tsin2tπtπ
  • 这是以参数方程形式给出的二维曲线,只要给定参数向量,再分别求出 x 、 y x、y xy 向量即可绘制函数曲线。程序如下:
t=-pi:pi/100:pi;
x=t.*cos(3*t);
y=t.*sin(t).*sin(t);
plot(x,y)
  • 程序运行后,得到的二维曲线如下所示。

在这里插入图片描述

  • 以上提高 plot 函数的自变量 x 、 y x、y xy 为长度相同的向量,这类情况是十分常见的。但在实际中应用中会产生一些变化,下面分别进行说明。
  • (1) 当 x x x 是向量, y y y 是矩阵时, x x x 的长度与矩阵 y y y 的行数或列数必须相等。
  • 如果 x x x 的长度等于 y y y 的行数,则以 x x x y y y 的每列为横、纵坐标绘制曲线,曲线的条数等于 y y y 的列数。
  • 如果 x x x 的长度等于 y y y 的列数,则以 x x x y y y 的每行为横、纵坐标绘制曲线,曲线的条数等于 y y y 的行数。
  • 如果 y y y 是方阵, x x x 的长度和矩阵 y y y 的行数或列数都相等,则以 x x x y y y 的每列为横、纵坐标绘制曲线。例如,下列程序可以在同一坐标中同时绘制出正弦和余弦曲线。
x=linspace(0,2*pi,100);
y=[sin(x),cos(x)];
plot(x,y)
  • 程序首先产生一个行向量 x x x,然后分别求取行向量 sin( x x x) 和 cos( x x x),并将它们构成矩阵 y y y 的两行。最后在同一坐标中同时绘制出两条曲线。
  • x x x 是矩阵, y y y 的长度必须等于矩阵 x x x 的行数或列数,绘制方式与前一种情况相似。
  • (2) 当 x 、 y x、y xy 是同型矩阵时,则以 x 、 y x、y xy 对应列元素为横、纵坐标分别绘制曲线,曲线条数等于矩阵的列数。例如,在同一坐标中同时绘制出正弦和余弦曲线,可用下面的程序。
t=linspace(0,2*pi,100) ; 
x=[t;t]';
y=[sin(t);cos(t)]';
plot(x,y) 
  • (3) plot 函数最简单的调用格式是只包含一个输入参数,即 plot(x)。 在这种情况下,当 x x x 是实向量时,则以该向量元素的下标为横坐标,元素值为纵坐标画出一条曲线,这实际上是绘制折线图。
  • x x x 是复数向量时,则分别以该向量元素实部和虚部为横、纵坐标绘制出一条曲线。例如,下面的程序可以绘制一个单位圆。
t=0:0.01:2*pi;
x=exp(i*t);  %x是一个复数向量
plot (x)
  • 这里需要注意的是,程序中的 i 是虚数单位,这样 x x x 是一个复数向量。为了保证这一点, i 不能被赋其他的值。
  • x x x 是实矩阵时,则按列绘制每列元素值相对其下标的曲线,曲线条数等于 x x x 矩阵的列数。当输入参数是复数矩阵时,则按列分别以元素实部和虚部为横、纵坐标绘制多条曲线。例如,下面的程序可以绘制 3 个同心圆。
t=0:0.01:2*pi;
x=exp(i*t);
y=[x;2*x;3*x]';
plot(y)

2. 含多个输入参数的 plot 函数

  • plot 函数可以包含若干组向量对,每一向量对可以绘制出一条曲线。相应的调用格式如下:
plot(x1,y1,x2,y2,...,xn,yn)
  • (1) 当输入参数都为向量时, x 1 x1 x1 y 1 , x 2 y1,x2 y1x2 y 2 , … , x n y2,…,xn y2xn y n yn yn 分别组成一组向量对,每一组向量对的长度可以不同。每一向量对可以绘制出一条曲线,这样可以在同一坐标内绘制出多条曲线。例如,下列程序可以在同一坐标中同时绘制出 3 根正弦曲线。
x=linspace(0,2*pi,100);
plot(x,sin(x),x,2*sin(x),x,3*sin(x))
  • (2) 当输入参数有矩阵形式时,配对的 x 、 y x、y xy 按对应列元素为横、纵坐标分别绘制曲线,曲
    线条数等于矩阵的列数。分析下列程序绘制的曲线。
x=linspace(0,2*pi,100);
y1=sin(x);
y2=2*sin(x);
y3=3*sin(x);
x=[x;x;x]';
y=[y1;y2;y3]';
plot(x,y,x,cos(x))
  • x x x y y y 都是含有 3 列的矩阵,它们组成输入参数对,绘制出 3 根正弦曲线, x x x 和 cos( x x x) 都是向量,它们组成输入参数对,绘制出一根余弦曲线。

3. 含选项的 plot 函数

  • MATLAB 提供了一些绘图选项, 用于确定所绘曲线的线型、颜色和数据点标记符号。这些选项可以组合使用。例如,b- . 表示蓝色点画线,y:d 表示黄色虚线并用菱形符标记数据点。
  • 当选项省略时,MATLAB 规定,线型一律用实线,自动循环使用当前坐标轴的 ColorOrder 属性指定的颜色(默认有 7 种颜色),无数据点标记符号。
  • 线型选项如下表所示。
选项 线型 选项 线型
- 实现(默认值) -. 点画线
: 虚线 双画线
  • 颜色选项如下表所示。
序号 选项 颜色 序号 选项 颜色
1 b(blue) 蓝色 5 m(magenta) 品红色
2 g(green) 绿色 6 y(yellow) 黄色
3 r(red) 红色 7 k(black) 黑色
4 c(cyan) 青色 8 w(white) 白色
  • 标记符号选项如下表所示。
选项 标记符号 选项 标记符号
. v(字母) 朝下三角符号
o(字母) 圆圈 ^ 朝上三角符号
x(字母) 叉号 < 朝左三角符号
+ 加号 > 朝右三角符号
* 星号 p(pentagram) 五角星符
s(square) 方块符 h(hexagram) 六角星符
d(diamond) 菱形符
  • 要设置曲线样式可以在 plot 函数中加绘图选项,其调用格式如下:
plot(x1,y1,选项1,x2,y2,选项2,...,xn,yn,选项n)
  • 例如,用不同线刑和颜色在同一坐标内绘制曲线 y = 2 e − 0.5 x sin ⁡ ( 2 π x ) y=2e^{-0.5x}\sin(2\pi x) y=2e0.5xsin(2πx) 及其包络线。
  • 程序如下:
x=(0:pi/100:2*pi)';
y1=2*exp(-0.5*x)*[1,-1];
y2=2*exp(-0.5*x).*sin(2*pi*x);
x1=(0:12)/2;
y3=2*exp(-0.5*x1).*sin(2*pi*x1);
plot(x,y1,'k:',x,y2,'b--',x1,y3,'rp');
  • 程序运行结果如下所示。plot 函数中包含 3 组绘图参数,第一组用黑色虚线绘出两根包络线,第二组用蓝色双画线绘出曲线 y y y,第三组用红色五角星离散标出数据点。程序中第一条命令用矩阵转置运算符将行向量转换为列向量。

在这里插入图片描述

4. 双纵坐标函数 plotyy

  • 在MATLAB中,如果需要绘制出具有不同纵坐标标度的两个图形,可以使用plotyy函数,
    其调用格式如下:
plotyy(x1,y1,x2,y2)
  • 其中, x 1 , y 1 x1,y1 x1y1 对应一条曲线, x 2 , y 2 x2,y2 x2y2 对应另一条曲线。横坐标的标度相同,纵坐标有两个,左纵坐标用于 x 1 , y 1 x1,y1 x1y1 数据对,右纵坐标用于 x2,y2$ 数据对。
  • 双纵坐标图形能把函数值具有不同量纲、不同数量级的两个函数绘制在同-一坐标中,有利于图形数据的对比分析。
  • 例如,用不同标度在同一坐标内绘制曲线 y = 2 e − 0.5 x sin ⁡ ( 2 π x ) y=2e^{-0.5x}\sin(2\pi x) y=2e0.5xsin(2πx) 及曲线 y = s i n x y=sinx y=sinx
  • 程序如下:
x=0:pi/100:2*pi;
y1=exp(-0.5*x).*sin(2*pi*x);
y2=sin(x);
plotyy(x,y1,x,y2);
  • 程序运行的结果如下所示。

在这里插入图片描述

二、绘制绘制图像的辅助操作

  • 绘制完图形后,可能还需要对图形进行一些辅助操作,以使图形意义更加明确,可读性更强。

1. 图形标注

  • 在绘制图形的同时,可以对图形加上一些说明,如图形名称、坐标轴说明以及图形某一部分的含义等,这些操作称为添加图形标注。有关图形标注函数的调用格式如下:
    title (图形名称)
    xlabel (x轴说明)
    ylabel (y轴说明)
    text (x,y,图形说明)
    legend (图例1,图例2,)
  • titlexlabelylabel 函数分别用于说明图形和坐标轴的名称。
  • text 函数是在 (x, y) 坐标处添加图形说明。
  • gtext 可以用来添加文本说明,执行该命令时,十字坐标光标自动跟随鼠标移动,单击鼠标即可将文本放置在十字光标处。例如,使用 gtext('cos(x)) 可放置字符串 cos(x)。
  • legend 函数用于绘制曲线所用线型、颜色或数据点标记图例,图例放置在图形空白处,用户还可以通,过鼠标移动图例,将其放到所希望的位置。
  • legend 函数外,其他函数同样适用于三维图形,需要注意的是,z 坐标轴说明用 zlabel 函数。
  • 上述函数中的说明文字,除使用标准的 ASCII 字符外,还可以使用 LaTeX(LaTeX 是一种十分流行的数学排版软件)格式的控制字符,这样就可以在图形上添加希腊字母、数学符号及公式等内容。
  • 在 MATLAB 支持的 LaTeX 字符中,用 \bf、 \it、\rm 控制字符分别定义黑体、斜体和正体字符,受 LaTeX 字符控制部分要加大括号 {} 括起来。例如,text(0.3,0.5,‘The useful {\bf MATLAB}’) 将使得 MATLAB 一词黑体显示。
  • 一些常用的 LaTeX 字符如下表所示,其中的各个字符既可以单独使用,又可以和其他字符及命令联合使用。例如,text(1,1,'sin({\omega}t+ {beta})) 将得到标注效果 sin( ω \omega ωt+ β \beta β)。
标识符 符号 标识符 符号 标识符 符号
\alpha α \alpha α \upsilon υ \upsilon υ \sim ∼ \sim
\beta β \beta β \phi ϕ \phi ϕ \leq ≤ \leq
\gamma γ \gamma γ \chi χ \chi χ \infty ∞ \infty
\delta δ \delta δ \psi ψ \psi ψ \clubsuit ♣ \clubsuit
\epsilon ϵ \epsilon ϵ \omega ω \omega ω \diamondsuit ♢ \diamondsuit
\zeta ζ \zeta ζ \Gamma Γ \Gamma Γ \heartsuit ♡ \heartsuit
\eta η \eta η \Delta Δ \Delta Δ \spadesuit ♠ \spadesuit
\theta θ \theta θ \Theta Θ \Theta Θ \leftrightarrow ↔ \leftrightarrow
\vartheta ϑ \vartheta ϑ \Lambda Λ \Lambda Λ \leftarrow ← \leftarrow
\iota ι \iota ι \Xi Ξ \Xi Ξ \uparrow ↑ \uparrow
\kappa κ \kappa κ \Pi Π \Pi Π \rightarrow → \rightarrow
\lambda λ \lambda λ \Sigma Σ \Sigma Σ \downarrow ↓ \downarrow
\mu μ \mu μ \Upsilon Υ \Upsilon Υ \circ ∘ \circ
\nu ν \nu ν \Phi Φ \Phi Φ \pm ± \pm ±
\xi ξ \xi ξ \Psi Ψ \Psi Ψ \geq ≥ \geq
\pi π \pi π \Omega Ω \Omega Ω \propto ∝ \propto
\rho ρ \rho ρ \forall ∀ \forall \partial ∂ \partial
\sigma σ \sigma σ \exists ∃ \exists \bullet ∙ \bullet
\varsigma ς \varsigma ς \ni ∋ \ni \div ÷ \div ÷
\tau τ \tau τ \cong ≅ \cong \neq ≠ \neq =
\equiv ≡ \equiv \approx ≈ \approx \aleph ℵ \aleph
\Im ℑ \Im \Re ℜ \Re \wp ℘ \wp
\otimes ⊗ \otimes \oplus ⊕ \oplus \oslash ⊘ \oslash
\cap ∩ \cap \cup ∪ \cup \supseteq ⊇ \supseteq
\supset ⊃ \supset \subseteq ⊆ \subseteq \subset ⊂ \subset
\int ∫ \int \in ∈ \in \nabla ∇ \nabla
\rfloor ⌋ \rfloor \lceil ⌈ \lceil \ldots … \ldots
\lfloor ⌊ \lfloor \cdot ⋅ \cdot \prime ′ \prime
\perp ⊥ \perp \neg ¬ \neg ¬ \mid ∣ \mid
\wedge ∧ \wedge \times × \times × \copyright © \copyright c
\rceil ⌉ \rceil \surd √ \surd \varpi ϖ \varpi ϖ
\vee ∨ \vee \langle ⟨ \langle \rangle ⟩ \rangle
  • 除了上表中给出的字符定义以外,还可以通过标准的 LaTeX 命令来定义上标和下标,这样可以使得图形标注更加丰富多彩。如果想在某个字符后面添加上标,则可以在该字符后面跟一个由 A 字符引导的字符串。
  • 若想把多个字符作为指数,则应该使用大括号。例如,e^{axt} 对应的标注效果为 e a x t e^{axt} eaxt,而 e^axt 对应的标注效果为 e a x t e^{a}xt eaxt。类似地可以定义下标,下标是由下画线 _ 引导的。例如,X_{12} 对应的标注效果为 X 12 X_{12} X12

2. 坐标控制

  • 在绘制图形时,MATLAB 可以自动根据要绘制曲线数据的范围选择合适的坐标刻度,使得曲线能够尽可能清晰地显示出来。所以,在一般情况下用户不必选择坐标轴的刻度范围。但是,如果用户对坐标系不满意,可利用 axis 函数对其重新设定。该函数的调用格式如下:
axis( [xmin, xmax, ymin, ymax, zmin, zmax])
  • 如果只给出前 4 个参数,则 MATLAB 按照给出的 x 、 y x、y xy 轴的最小值和最大值选择坐标系范围,以便绘制出合适的二维曲线。
  • 如果给出了全部参数,则系统按照给出的 3 个坐标轴的最小值和最大值选择坐标系范围,以便绘制出合适的三维图形。
  • axis 函数功能丰富,常用的用法还有以下几种。
  • (1) axis equal 表示纵、横坐标轴采用等长刻度。
  • (2) axis square 表示产生正方形坐标系(默认为矩形)。
  • (3) axis auto 表示使用默认设置。
  • (4) axis off 表示取消坐标轴。
  • (5) axis on 表示显示坐标轴。
  • 给坐标加网格线可以用 grid 命令来控制。grid on/off 命令控制是画还是不画网格线,不带参数的 grid 命令在两种状态之间进行切换。
  • 给坐标加边框用 box 命令来控制。box on/off 命令控制是加还是不加边框线,不带参数的 box 命令在两种状态之间进行切换。
  • 例如,我们绘制分段函数曲线并添加图形标注。 f ( x ) = { x , 2 , 5 − x / 2 , 1 , 0 ≤ x < 4 4 ≤ x < 6 6 ≤ x < 8 x ≥ 8 f(x)=\left\{\begin{matrix}\sqrt{x} , \\2, \\5-x/2, \\1,\end{matrix}\right. \begin{matrix}0\le x< 4 \\4\le x< 6 \\6\le x< 8 \\x\ge 8 \end{matrix} f(x)= x ,2,5x/2,1,0x<44x<66x<8x8
  • 整体程序如下:
x=linspace(0,10,100);  %产生自变量向量x
y=[];  %y的初始值为空
for x0=x
    if x0>=8
        y=[y,1];  %将函数值追加到向量y
    elseif x0>=6
        y=[y,5-x0/2];
    elseif x0>=4
        y=[y,2];
    elseif x0>=0
        y=[y,sqrt(x0)];
    end
end
plot(x,y)
axis([0,10,0,2.5])  %设置坐标轴
title('分段函数曲线');  %加图形标题
xlabel('Variable X');  %加X轴说明
ylabel('Variable Y');  %加Y轴说明
text(2,1.3,'y=x^{1/2}');  %在指定位置添加图形说明
text(4.5,1.9,'y=2');
text(7.3,1.5,'y=5-x/2');
text(8.5,0.9,'y=1');
  • 程序运行结果如下。

在这里插入图片描述

3. 图形保持

  • 一般情况下,每执行一次绘图命令就刷新一次当前图形窗口,图形窗口原有图形将不复存在。
  • 若希望在已存在的图形上再继续添加新的图形,可使用图形保持命令 hold
  • hold on/off 命令控制是保持原有图形还是刷新原有图形,不带参数的 hold 命令在两种状态之间进行切换。
  • 例如,我们使用图形保持功能在同一坐标内绘制曲线 y = 2 e − 0.5 x sin ⁡ ( 2 π x ) y=2e^{-0.5x}\sin(2\pi x) y=2e0.5xsin(2πx) 及其包络线。
  • 程序如下:
x=(0:pi/100:2*pi)';
y1=2*exp(-0.5*x)*[1,-1];
y2=2*exp(-0.5*x).*sin (2*pi*x);
plot(x,y1,'b:');  %绘制两根包络线
axis([0,2*pi,-2,2]);  %设置坐标
hold on;  %设置图形保持状态
plot(x,y2,'k');  %绘制曲线
legend('包络线','包络线','曲线y');  %加图例
hold off;  %关闭图形保持
grid  %网格线控制
  • 程序运行结果如下:

在这里插入图片描述

4. 图形窗口的分割

  • 在实际应用中,经常需要在一个图形窗口内绘制若干个独立的图形,这就需要对图形进行分割。分割后的图形窗口由若干个绘图区组成,每一个绘图区可以建立独立的坐标系制图形。同一图形窗口中的不同图形称为子图。
  • MATLAB 系统提供了 subplot 函数,用来将当前图形窗口分割成若干个绘图区。每个区域代表一个独立的子图,也是一个独立的坐标系,可以通过 subplot 函数激活某一区,该区为活动区,所发出的绘图命令都是作用于活动区域。
  • subplot 函数的调用格式如下:
subplot (m,n,p)
  • 该函数将当前图形窗口分成 m × n m×n m×n 个绘图区,即 m m m 行,每行 n n n 个绘图区,区号按行优先编号,且选定第 p p p 个区为当前活动区。在每一个绘图区允许以不同的坐标系单独绘制图形。
  • 例如,我们在一个图形窗口中以子图形式同时绘制正弦、余弦、正切、余切曲线。
  • 程序如下:
x=linspace(0,2*pi,60);
y=sin(x);
z=cos(x);
t=sin(x)./(cos(x)+eps);
ct=cos(x)./(sin (x)+eps);

subplot(2,2,1);  %选择2x2个区中的1号区
plot(x,y);
title('sin(x)');
axis([0,2*pi,-1,1]);

subplot(2,2,2);  %选择2x2个区中的2号区
plot(x,z);
title('cos(x)');
axis([0,2*pi,-1,1]);

subplot(2,2,3);  %选择2x2个区中的3号区
plot(x,t);
title('tangent(x)');
axis([0,2*pi,-40,40]);

subplot(2,2,4);  %选择2x2个区中的4号区
plot(x,ct) ;
title('cotangent(x)');
axis([0,2*pi,-40,40]);
  • 程序运行结果如下图所示。

在这里插入图片描述

  • 上例中将图形窗口分割成 2×2 个绘图区,编号从 1 到 4,各区分别绘制一幅图形,这是最规则的情况。但实际上,还可以进行更为灵活的分割,详见下面的程序(需要注意的是,图片的布局是以行为主,其次只需要数清每一个图的具体位置,大图小图不可以互相重叠)。
x=linspace(0,2*pi,60);
y=sin(x);
z=cos(x);
t=sin(x)./(cos(x)+eps);
ct=cos(x)./(sin (x)+eps);

subplot(2,2,1);  %选择2x2个区中的1号区
plot(x,y-1);
title('sin(x)-1');
axis([0,2*pi,-2,0]);

subplot(2,1,2);  %选择2x2个区中的2号区
plot(x,z-1);
title('cos(x)-1');
axis([0,2*pi,-2,0]);

subplot(4,4,3);  %选择4x4个区中的3号区
plot(x,y);
title('sin(x)');
axis([0,2*pi,-1,1]);

subplot(4,4,4);  %选择4x4个区中的4号区
plot(x,y);
title('cos(x)');
axis([0,2*pi,-1,1]);

subplot(4,4,7);  %选择4x4个区中的7号区
plot(x,t);
title('tangent(x)');
axis([0,2*pi,-40,40]);

subplot(4,4,8);  %选择4x4个区中的8号区
plot(x,ct) ;
title('cotangent(x)');
axis([0,2*pi,-40,40]);
  • 程序运行结果如下图所示。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45891612/article/details/130739074