MATLAB的语法学习曲线很特别:入门时用起来特别简单舒服,但是深入学下去就会感觉到语法非常混乱,无所适从。 尤其在绘图部分,MATLAB杂揉了命令式语句和面向对象的语句,存在太多太多的语法糖,毫无逻辑性可言。

基本作图

MATLAB可以非常容易地画一个曲线图,只需要三行代码即可(下面的figure;语句可以省略)

1
2
3
4
5
x=linspace(0,5);
y=sin(x);

figure;
plot(x, y);

MATLAB将会弹出一个绘图窗口,在其中绘制曲线。

我们可以在曲线图中加上常见的绘图元素

1
2
3
4
5
6
7
8
9
10
11
12
13
14
% 标题
title('Sine Wave');

% 轴标签
xlabel('x');
ylabel('sin(x)');

% x轴和y轴范围
axis([0 2*pi -1.5 1.5]);
% 或者单独设置x轴范围
% xlim([xmin xmax])

% 添加网格
grid on;

我们可以一次性使用plot绘制多条曲线

1
2
3
4
5
6
x = linspace(0, 2*pi, 100);
y1 = sin(x);
y2 = cos(x);

figure;
plot(x, y1, x, y2);

可以设置曲线的样式(颜色,粗细,标记等),例如

1
2
3
4
5
6
x = linspace(0, 2*pi, 100);
y = [sin(x); cos(x); tan(x)];

% 绘制多条曲线并指定颜色、线型和线宽
figure;
plot(x, y, 'LineWidth', 2, 'LineStyle', {'--', '-.', ':'}, 'Color', {'r', 'b', 'g'});

我们还可以在曲线图中添加图例

1
legend('sin(x)', 'cos(x)', `tan(x)`);

绘图窗口保持

默认情况下,我们绘制的曲线图呈现在一个绘图窗口中,但是再次调用plot函数绘图时,MATLAB 会自动清空已打开的绘图窗口,重新绘制。

如果我们在同一窗口中希望把旧图像保持,在此基础上继续绘图,需要使用hold on命令。hold on命令会使得当前的绘图窗口的内容保持住, 直到使用hold off命令或者关闭绘图窗口。例如

1
2
3
4
5
6
7
8
9
10
11
12
x = linspace(0,2*pi);
y = sin(x);

figure;
plot(x,y)

hold on

y2 = cos(x);
plot(x,y2)

hold off

多个绘图窗口

我们可以多次调用figure;语句来创建不同的绘图窗口,分别在其中进行绘图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
x = linspace(0, 30);

% 创建第一个图形窗口并绘制正弦函数
figure;
plot(x, sin(x));
title('Sine');
xlabel('x');
ylabel('sin(x)');

% 创建第二个图形窗口并绘制余弦函数
figure;
plot(x, cos(x));
title('Cosine');
xlabel('x');
ylabel('cos(x)');

多个子图

有很多种方式可以创建子图,下面分别举例。

基于subplot实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
x = linspace(0, 30);

figure;

subplot(2, 2, 1);
plot(x, sin(x));
title('Sine');

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');

sgtitle('Trigonometric Functions');

基于titledlayout实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
t = tiledlayout(2,2); % 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")

保存图片

MATLAB提供了很多种保存绘图的方式,我们重点关注其中的两种:

  • savefig 保存的是 MATLAB 图形的完整信息,以 .fig 格式保存,可在 MATLAB 中重新加载和编辑,但是不能使用图片浏览器打开;
  • saveas 保存的是 MATLAB 图形的静态图像,以具体图片格式保存,如 PNG、EPS、JPEG 等,无法重新编辑。

使用savefig可以直接保存绘图窗口到文件中,只需要提供文件名

1
2
3
4
5
6
7
8
9
x = linspace(0, 30);

figure;
plot(x, sin(x));
title('Sine');
xlabel('x');
ylabel('sin(x)');

savefig("temp.fig")

也可以保存指定的figure句柄

1
2
3
4
5
6
7
8
9
x = linspace(0, 30);

fig1 = figure;
plot(x, sin(x));
title('Sine');
xlabel('x');
ylabel('sin(x)');

savefig(fig1,"temp.fig")

我们可以在MATLAB中直接点击.fig文件来打开它,也可以在代码中使用openfig来打开

1
openfig("temp.fig")

使用saveas可以保存为某个具体的图片格式,例如

1
2
fig = openfig('example.fig');
saveas(fig, 'example_saved.png');

或者

1
2
3
4
5
6
7
8
9
x = linspace(0, 30);

fig1 = figure;
plot(x, sin(x));
title('Sine');
xlabel('x');
ylabel('sin(x)');

saveas(fig1, 'example_saved.png');

注意:

  • 我们必须为saveas函数提供figure句柄;
  • 保存图片的格式会根据文件后缀名推测,例如xxx.pngxxx.jpg