在画图的时候有没有遇到过这种情况:图里画了 5 条线,但你只想给其中第 3 条和第 4 条线加图例。于是你熟练地打开了图例,发现前面多余的图例很碍眼,就手动在属性编辑器里把前两个删了。
结果, 剩下的图例文字是保留了,但前面的颜色自动“顺延”了! 原本红色的线,图例变成了蓝色;原本蓝色的线,图例变成了黑色。完全是“张冠李戴”,根本对应不上!
今天这期专栏就来彻底解决这个问题,教大家两招代码级的解决方案,不用鼠标点点点,精准控制你想让谁显示,谁就显示!
痛点回顾:为什么手动删除会错乱?
MATLAB 的 legend 逻辑其实很“呆”。当你生成图例时,它默认按照绘图顺序(Plot 1, Plot 2, Plot 3...)来分配颜色和文字。
如果你手动删除了第 1 个文本,MATLAB 就会以为你只想要给 Plot 1 配上原本属于 Plot 2 的文字。它只认顺序,不认对象。这就是颜色错乱的根源。
方法一:给线条穿上“隐身衣” (HandleVisibility)
这是最简单、最偷懒的方法。
如果我们不想让某条线出现在图例里,我们可以在 plot 的时候,直接告诉 MATLAB:“这条线你别管,假装看不见它。”
只需要加一个属性:'HandleVisibility', 'off'
📝 代码示例:
Matlab
clc; clear; close all; x = 0:0.1:10; figure; hold on; % 1. 画背景辅助线(不需要图例) % 加上 HandleVisibility = off,图例会自动跳过它 plot(x, sin(x), 'Color', [0.8 0.8 0.8], 'LineWidth', 5, 'HandleVisibility', 'off'); % 2. 画正式数据线(需要图例) plot(x, cos(x), 'r', 'LineWidth', 2); % 3. 生成图例 % 此时 MATLAB 会以为只有第2条线存在 legend('我是余弦曲线');
✅ 优点: 简单粗暴,适合辅助线、背景线较多的场景。
方法二:给线条发“身份证” (句柄法 Handle Vector)
这是最专业、最稳健的方法,特别适合在 for 循环或者复杂绘图中使用。
原理是:我们在画图的时候,用一个变量(句柄)把这条线“抓”在手里。等到要画图例的时候,直接把这几个变量扔给 legend 函数。
MATLAB 会收到指令:“只给这几个 ID 的线条加图例,其他的线都别理!”
📝 代码示例:
Matlab clc; clear; close all; x = 0:0.1:10; figure; hold on; % 1. 画一堆乱七八糟的背景线 plot(x, sin(x), 'b--'); plot(x, sin(x)+1, 'g--'); % 2. 画我们要关注的线,并抓住它们的句柄(h1, h2) h1 = plot(x, cos(x), 'r', 'LineWidth', 2); h2 = plot(x, cos(x)+1, 'm', 'LineWidth', 2); % 3. 精准点名 % 语法:legend([句柄列表], '名字1', '名字2') legend([h1, h2], '红色关键线', '紫色关键线');
✅ 优点:
绝对不会错:颜色死死锁定在对象上,不管前面画了多少条线,都不会受影响。
循环绘图神器:如果在循环里画了 100 次,只想要其中某一次的图例,用这个方法最方便。
总结
如果你只是想简单地隐藏几条背景线,用 方法一 (HandleVisibility, 'off')。
如果你在写复杂的代码,或者在循环里绘图,强烈建议用 方法二 (句柄指定法),这是科研绘图的“标准姿势”。
学会这两招,再也不用担心图例颜色对不上了!
觉得有用的话,别忘了点个赞和收藏哦!👍⭐ 关注我,分享更多 MATLAB 绘图知识!