如何在Matlab 2014b中为图例添加标题?
在Matlab R2014b中为图例添加标题的解决方案
Matlab R2014b的legend对象不支持直接通过title()函数添加标题,这也是你当前代码失效的核心原因。以下是两种可行的实现方法:
方法一:通过annotation手动添加图例标题
先创建图例,获取其位置信息,再在图例上方添加独立文本作为标题:
% 保留原有绘图逻辑 clear all; clc; close all; N = 3:1:20; dpt1 = [7.75, 5.4, 4.13, 3.35, 2.82, 2.43, 2.14, 1.91, 1.72, 1.57, 1.44, 1.333, 1.24, 1.16, 1.088, 1.025, 0.97, 0.918]; dpt2 = [12.88, 8.97, 6.884, 5.581, 4.695, 4.05, 3.56, 3.18, 2.87, 2.615, 2.405, 2.222, 2.068, 1.932, 1.815, 1.709, 1.615, 1.532]; dpt3 = [18.05, 12.55, 9.63, 7.812, 6.57, 5.67, 4.99, 4.453, 4.02, 3.662, 3.363, 3.113, 2.895, 2.705, 2.54, 2.394, 2.263, 2.145]; figure(1); grid on; title('Minimum Separation (dpt)'); xlabel('NO. of Antenna'); ylabel('Minimum Separation (dpt)'); hold on; plot(N, dpt1, 'r'); plot(N, dpt2, 'g'); plot(N, dpt3, 'b'); hold off; % 创建图例 lgd = legend(sprintf('pt1 = %g cm, \\lambda = %g cm, \\Deltax = %g cm, Z = %g cm ', 2, 0.4, 0.5, 30),... sprintf('pt1 = %g cm, \\lambda = %g cm, \\Deltax = %g cm, Z = %g cm ', 2, 0.4, 0.5, 50),... sprintf('pt1 = %g cm, \\lambda = %g cm, \\Deltax = %g cm, Z = %g cm ', 2, 0.4, 0.5, 70)); % 获取图例位置,计算标题摆放坐标 lgd_pos = get(lgd, 'Position'); title_pos = [lgd_pos(1), lgd_pos(2)+lgd_pos(4), lgd_pos(3), 0.03]; % 标题位于图例正上方 % 添加图例标题 annotation('textbox', title_pos, ... 'String', 'Min Separation (dpt)', ... 'EdgeColor', 'none', ... 'HorizontalAlignment', 'center', ... 'VerticalAlignment', 'bottom');
方法二:利用空图例条目模拟标题
创建一个无显示线条的图例条目,将标题文本放在第一个位置,视觉上充当图例标题:
% 保留原有绘图逻辑 clear all; clc; close all; N = 3:1:20; dpt1 = [7.75, 5.4, 4.13, 3.35, 2.82, 2.43, 2.14, 1.91, 1.72, 1.57, 1.44, 1.333, 1.24, 1.16, 1.088, 1.025, 0.97, 0.918]; dpt2 = [12.88, 8.97, 6.884, 5.581, 4.695, 4.05, 3.56, 3.18, 2.87, 2.615, 2.405, 2.222, 2.068, 1.932, 1.815, 1.709, 1.615, 1.532]; dpt3 = [18.05, 12.55, 9.63, 7.812, 6.57, 5.67, 4.99, 4.453, 4.02, 3.662, 3.363, 3.113, 2.895, 2.705, 2.54, 2.394, 2.263, 2.145]; figure(1); grid on; title('Minimum Separation (dpt)'); xlabel('NO. of Antenna'); ylabel('Minimum Separation (dpt)'); hold on; plot(N, dpt1, 'r'); plot(N, dpt2, 'g'); plot(N, dpt3, 'b'); % 添加一个空绘图对象用于生成标题条目 plot(NaN, NaN, 'w', 'LineWidth', 0); hold off; % 创建图例,第一个条目作为标题 lgd = legend('Min Separation (dpt)',... sprintf('pt1 = %g cm, \\lambda = %g cm, \\Deltax = %g cm, Z = %g cm ', 2, 0.4, 0.5, 30),... sprintf('pt1 = %g cm, \\lambda = %g cm, \\Deltax = %g cm, Z = %g cm ', 2, 0.4, 0.5, 50),... sprintf('pt1 = %g cm, \\lambda = %g cm, \\Deltax = %g cm, Z = %g cm ', 2, 0.4, 0.5, 70)); % 隐藏标题条目的线条 set(get(lgd, 'Children'), 'LineStyle', 'none');
方法对比
- 方法一:标题独立于图例,位置可自由调整,适合需要自定义排版的场景;
- 方法二:视觉风格更贴合原生图例,无需计算坐标,操作更简洁。
内容的提问来源于stack exchange,提问作者Muhammad Salem
相关产品推荐
相关产品推荐

