技术文章
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 0≤x≤2π 区间内,我们绘制曲线 y = 2 e − 0.5 x sin ( 2 π x ) y=2e^{-0.5x}\sin(2\pi x) y=2e−0.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 x、y 向量即可绘制函数曲线。程序如下:
t=-pi:pi/100:pi;
x=t.*cos(3*t);
y=t.*sin(t).*sin(t);
plot(x,y)
- 程序运行后,得到的二维曲线如下所示。
- 以上提高
plot
函数的自变量 x 、 y x、y x、y 为长度相同的向量,这类情况是十分常见的。但在实际中应用中会产生一些变化,下面分别进行说明。 - (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 x、y 是同型矩阵时,则以 x 、 y x、y x、y 对应列元素为横、纵坐标分别绘制曲线,曲线条数等于矩阵的列数。例如,在同一坐标中同时绘制出正弦和余弦曲线,可用下面的程序。
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 和$ yl, x2和 y 2 , … , x n y2,…,xn y2,…,xn 和 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
x、y 按对应列元素为横、纵坐标分别绘制曲线,曲
线条数等于矩阵的列数。分析下列程序绘制的曲线。
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=2e−0.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 x1,y1 对应一条曲线, x 2 , y 2 x2,y2 x2,y2 对应另一条曲线。横坐标的标度相同,纵坐标有两个,左纵坐标用于 x 1 , y 1 x1,y1 x1,y1 数据对,右纵坐标用于 x2,y2$ 数据对。
- 双纵坐标图形能把函数值具有不同量纲、不同数量级的两个函数绘制在同-一坐标中,有利于图形数据的对比分析。
- 例如,用不同标度在同一坐标内绘制曲线 y = 2 e − 0.5 x sin ( 2 π x ) y=2e^{-0.5x}\sin(2\pi x) y=2e−0.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,…)
title
和xlabel
、ylabel
函数分别用于说明图形和坐标轴的名称。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 x、y 轴的最小值和最大值选择坐标系范围,以便绘制出合适的二维曲线。
- 如果给出了全部参数,则系统按照给出的 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,5−x/2,1,0≤x<44≤x<66≤x<8x≥8
- 整体程序如下:
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=2e−0.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]);
- 程序运行结果如下图所示。
版权声明:
本文为[虚心求知的熊]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_45891612/article/details/130739074