核心概念
hold 命令的核心作用是控制当前坐标轴的行为,当你绘制第一个图形(如一条曲线)后,hold 命令可以决定是清空坐标轴再绘制新图形,还是在现有的坐标轴上继续添加新图形。

你可以把它想象成在一块白板上画画:
- 默认情况 (
hold off):每次画新图前,先擦掉白板上所有旧的内容。 hold on:告诉 MATLAB “先别擦白板,把新画的内容直接叠加在旧图上”。hold off:告诉 MATLAB “好了,下次画新图前记得把白板擦干净”。
命令详解
hold 命令通常有两种使用形式:
hold onhold off
还有一个用于切换状态的命令:
hold
下面我们分别介绍。

hold on
功能:保持当前坐标轴的图形,后续的绘图命令(如 plot, scatter, surf 等)将把新的图形绘制在同一个坐标轴上。
特点:
- MATLAB 会自动调整坐标轴的范围,以确保所有图形都能完整显示。
- 新图形会使用不同的颜色和线型进行区分(这是 MATLAB 的默认行为)。
示例:在同一个图上绘制正弦和余弦函数。
% 1. 创建一个新图形窗口,并绘制第一个函数 y = sin(x)
x = 0:0.01:2*pi;
plot(x, sin(x), 'b-', 'LineWidth', 2); % 蓝色实线'正弦和余弦函数'); % 添加标题
xlabel('x'); % 添加 x 轴标签
ylabel('y'); % 添加 y 轴标签
grid on; % 添加网格
% 2. 使用 hold on 保持当前图形
hold on;
% 3. 在同一个坐标轴上绘制第二个函数 y = cos(x)
plot(x, cos(x), 'r--', 'LineWidth', 2); % 红色虚线
% 4. 添加图例来区分两条曲线
legend('sin(x)', 'cos(x)');
% 5. (可选)当所有图形都绘制完毕后,使用 hold off 恢复默认状态
% 这是一个好习惯,可以避免后续绘图命令意外叠加。
hold off;
运行这段代码,你将得到一个包含蓝色正弦曲线和红色余弦曲线的图形,并带有标题、坐标轴标签、网格和图例。

hold off
功能:关闭 hold on 状态,恢复 MATLAB 的默认绘图行为,这意味着执行任何新的绘图命令时,都会先清空当前坐标轴,然后再绘制新图形。
特点:
- 这是 MATLAB 的默认状态。
- 在绘制完多个叠加图形后,最好执行一次
hold off,以确保后续的绘图命令不会受到影响。
示例:
% 假设我们刚刚绘制了 sin 和 cos 的叠加图
% 现在我们想画一个新的图,y = x^2
% 直接执行 plot 命令
x = -2:0.1:2;
plot(x, x.^2, 'g-', 'LineWidth', 2);
% 因为默认是 hold off,所以之前 sin 和 cos 的图形会被清空
% 只剩下绿色的 y = x^2 曲线'y = x^2');
xlabel('x');
ylabel('y^2');
hold (不带任何参数)
功能:在 hold on 和 hold off 之间进行切换。
- 如果当前状态是
off,执行hold会将其变为on。 - 如果当前状态是
on,执行hold会将其变为off。
这个命令在交互式使用或编写脚本时非常方便,可以快速切换状态。
示例:
% 第一次执行 hold,状态变为 on hold; plot(x, sin(x)); % 第二次执行 hold,状态切换回 off hold; % 现在如果再执行 plot,之前的图形会被清除 plot(x, cos(x));
重要注意事项和最佳实践
-
坐标轴自动缩放:使用
hold on时,MATLAB 会自动调整坐标轴的xlim和ylim,以适应所有被绘制的图形,这通常是你想要的行为,但有时也会带来问题(见下一点)。 -
数据范围差异巨大时:如果两个数据集的数值范围相差非常悬殊,自动缩放可能会导致其中一个图形看起来像一条直线,因为它在坐标轴上几乎不可见。
- 解决方案:在这种情况下,你需要使用
yyaxis命令创建双 y 轴,或者对其中一个数据进行归一化处理。
双 y 轴示例 (
yyaxis):x = 0:0.01:10; % 绘制第一个数据,使用左侧 y 轴 yyaxis left; plot(x, sin(x), 'b-'); ylabel('左侧 y 轴: sin(x)'); % 保持当前图形 hold on; % 绘制第二个数据,使用右侧 y 轴 yyaxis right; plot(x, exp(x/5), 'r-'); % 指数函数增长很快 ylabel('右侧 y 轴: exp(x/5)'); '使用双 y 轴显示不同范围的函数'); hold off; % 好习惯 - 解决方案:在这种情况下,你需要使用
-
图形对象属性:当使用
hold on叠加图形时,新图形的属性(如颜色、线型、标记符号)由plot函数本身决定,而不是由旧的图形决定,MATLAB 会自动循环使用颜色和线型顺序。 -
恢复默认状态:在一个脚本中,如果你在中间使用了
hold on,最好在脚本的末尾明确地加上hold off,这样可以确保如果该脚本被其他脚本调用,或者你继续在命令行窗口中绘图时,不会受到之前hold on状态的影响。
总结表格
| 命令 | 功能 | 状态 | 后续绘图行为 |
|---|---|---|---|
hold on |
保持当前图形,叠加新图形 | 开启 | 在现有坐标轴上添加图形,自动调整坐标轴范围。 |
hold off |
关闭保持状态,恢复默认行为 | 关闭 | 清空坐标轴,绘制新图形。 |
hold |
切换 on 和 off 状态 |
切换 | 如果是 off -> on;如果是 on -> off。 |
| (默认) | - | 关闭 | 同 hold off。 |
希望这个详细的解释能帮助你完全理解并熟练使用 MATLAB 的 hold 命令!
