You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MATLAB柱状图中为特定颜色条形添加额外图例

解决方案

1. 添加红、蓝色条形图例且保留原有结构

要在现有图例下方新增颜色说明条目,最稳妥的方式是创建虚拟图形对象(不显示在绘图区域),再将原有条形对象的句柄与虚拟对象一起传入legend函数,具体操作如下:

步骤1:创建虚拟对象

在原有legend调用前添加以下代码,生成红色和蓝色的虚拟色块(设置HandleVisibility为'off'避免干扰主绘图):

% 创建用于图例的虚拟色块
h_red = patch([0 1 1 0], [0 0 1 1], [1,0,0], 'HandleVisibility','off');
h_blue = patch([0 1 1 0], [0 0 1 1], [0,0,1], 'HandleVisibility','off');

步骤2:合并图例条目

修改原有的legend调用,将原有配置标签与新增颜色说明标签合并,同时传入原有条形对象b1和虚拟对象:

% 合并原有图例与新增颜色说明
legend([b1, h_red, h_blue], ...
       ["m-CAP \Phi_{1/2}=10°", "m-CAP \Phi_{1/2}=30°", "m-CAP \Phi_{1/2}=45°", "m-CAP \Phi_{1/2}=60°", ...
        "DCO-OFDM \Phi_{1/2}=10°", "DCO-OFDM \Phi_{1/2}=30°", "DCO-OFDM \Phi_{1/2}=45°", "DCO-OFDM \Phi_{1/2}=60°", ...
        "红色条形:m-CAP的LOS+NLOS效应", "蓝色条形:DCO-OFDM的LOS+NLOS效应"], ...
       'Location', 'Best');

这种方式完全保留原有8个配置的图例结构,同时在下方新增两个颜色说明条目。

2. 更高效的实现方式

方式一:简化虚拟对象创建

使用patch创建虚拟色块比bar更轻量,占用资源更少,效果完全一致,就是上面步骤1中的代码。

方式二:批量生成图例标签

避免手动拼接长标签数组,用arrayfun批量生成原有配置的图例标签,提升代码可维护性:

% 批量生成原有配置的图例标签
mCAP_labels = arrayfun(@(ang) sprintf('m-CAP \\Phi_{1/2}=%d°', ang), angles, 'UniformOutput', false);
DCO_labels = arrayfun(@(ang) sprintf('DCO-OFDM \\Phi_{1/2}=%d°', ang), angles, 'UniformOutput', false);
all_labels = [mCAP_labels, DCO_labels, ...
              {'红色条形:m-CAP的LOS+NLOS效应', '蓝色条形:DCO-OFDM的LOS+NLOS效应'}];

% 调用图例
legend([b1, h_red, h_blue], all_labels, 'Location', 'Best');

方式三:统一颜色设置逻辑

把红色条形的颜色设置用循环简化,和上方的渐变颜色处理保持一致,提升代码整洁度:

b2 = bar(data_with_reflection', 'grouped','HandleVisibility','off');
% 批量设置红色
red_color = repmat([1,0,0], size(b2,1), 1);
for k = 1:length(b2)
    b2(k).FaceColor = 'flat';
    b2(k).CData = repmat(red_color(k,:), size(b2(k).CData,1), 1);
end

内容的提问来源于stack exchange,提问作者SH_IQ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 08:15:17