之前,我们已经分享了很多Matlab绘图函数的文章。今天这篇,属于Matlab入门篇,简单介绍下Matlab中二维图、三维图的创建方法,以及如何在一张图里绘制多张图。这里,主要以plot函数为例绘制二维图,以surf函数为例绘制三维图,以subplot、tiledlayout创建多个绘图。
二维绘图
要创建二维线图,请使用plot
函数。例如,绘制在从0到2π的值组成的线性间距向量上的正弦函数:
x = linspace(0,2*pi);
y = sin(x);
plot(x,y)
可以标记轴并添加标题。需要注意的是,Matlab R2017a之前的版本需要用单引号代替双引号。
xlabel("x")
ylabel("sin(x)")
title("Plot of the Sine Function")
通过向 plot
函数添加第三个输入参数,您可以使用红色虚线绘制相同的变量。同样的,Matlab R2017a之前的版本请用单引号代替双引号:
plot(x,y,"r--")
"r--"
(MatlabR2017a)、'r--'
(MatlabR2016a)为线条设定。每个设定可包含表示线条颜色、样式和标记的字符。标记是在绘制的每个数据点上显示的符号,例如,+
、o
或 *
。例如,g:*"
请求绘制使用 *
标记的绿色点线。
请注意,为第一幅绘图定义的标题和标签不再被用于当前的图窗窗口中。默认情况下,每次调用绘图函数、重置坐标区及其他元素以准备新绘图时,MATLAB® 都会清空图窗。
要将绘图添加到现有图窗中,请使用hold on
。在使用 hold off
或关闭窗口之前,当前图窗窗口中会显示所有绘图。参考如下例子:当然,需要注意旧版本只能用单引号,而不是双引号,结果没有区别。
x = linspace(0,2*pi);
y = sin(x);
plot(x,y)
hold on
y2 = cos(x);
plot(x,y2,":")
legend("sin","cos")
hold off
三维绘图
三维图通常显示一个由带两个变量的函数 z=f(x,y) 定义的曲面图。例如,对于给定的行向量和列向量 x
和 y
,每个向量包含 [-2,2] 范围内的 20 个点,计算 z=xe−x^2−y^2 。
x = linspace(-2,2,20);
y = x';
z = x .* exp(-x.^2 - y.^2);
以上这种z值的写法,涉及了矩阵维度不一致,需要Matlab R2021b才可以支持;
老版本,我们可以使用如下方法来实现:两种方法,很明显写起来更方便,所以还是抓紧升级自己的Matlab吧。下面的meshgrid函数只能通过设定间隔来设定x、y值。
即,上面的linspace为-2到2平均取20个数字;下面的meshgrid为从-2到2,每隔0.15取一个值。其实,仔细考虑一下,没啥太大影响。
[x,y] = meshgrid(-2:0.15:2,-2:0.15:2);
z = x .* exp(-x.^2 - y.^2);
然后,创建曲面图。
surf(x,y,z)
surf
函数及其伴随函数 mesh
以三维形式显示曲面图。surf
使用颜色显示曲面图的连接线和面。mesh
生成仅以颜色标记连接线条的线框曲面图。
多个绘图
您可以使用 tiledlayout
或 subplot
在同一窗口的不同部分显示多个绘图。
tiledlayout
函数是在 R2019b 中引入的,该函数比 subplot
提供更多对标签和间距的控制。例如,在图窗窗口中创建 2×2 布局。然后,每当您要某个绘图出现在下一区域中时,请调用 nexttile
。
t = tiledlayout(2,2);
title(t,"Trigonometric Functions")
x = linspace(0,30);
nexttile
plot(x,sin(x))
title("Sine")
nexttile
plot(x,cos(x))
title("Cosine")
nexttile
plot(x,tan(x))
title("Tangent")
nexttile
plot(x,sec(x))
title("Secant")
关于R2019b之前的版本,请使用如下subplot的写法,创建多个绘图:这里,我用的Matlab R2016a,因此把标题命名中的双引号一并换成了单引号。
x = linspace(0,30);
subplot(2,2,1)
plot(x,sin(x))
title('1Sine1')
subplot(2,2,2)
plot(x,cos(x))
title('Cosine')
subplot(2,2,3)
plot(x,tan(x))
title('Tangent')
subplot(2,2,4)
plot(x,sec(x))
title('Secant')
需要注意的是,subplot方式无法为这四张图一起写一个共同的标题。
转载文章,原文出处:MathWorks官网,由古哥整理发布
如若转载,请注明出处:https://iymark.com/articles/2854.html