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

Matlab中如何为所有柱状图显示对应图例?

解决MATLAB柱状图仅显示第一个图例的问题

问题出在你使用一维数组作为bar函数的输入,加上stacked参数后,MATLAB会把这6个数值当成同一组内的堆叠分段,而非6个独立的柱子,因此h只对应一个bar对象,图例自然只能识别第一个条目。

修改后的代码

figure
CoverageArea = [101.1303,0,114.9316,45.2112,116.5973,95.8953];
% 把一维数组转为列向量,让每个值对应一个独立柱子
CoverageArea = CoverageArea(:);
BarNames = {'\Phi_1_/_2 = 15, (\phi & \psi) =\pm 10',...
            '\Phi_1_/_2 = 15, (\phi & \psi) =\pm 40',...
            '\Phi_1_/_2 = 30, (\phi & \psi) =\pm 10',...
            '\Phi_1_/_2 = 30, (\phi & \psi) =\pm 40',...
            '\Phi_1_/_2 = 60, (\phi & \psi) =\pm 10',...
            '\Phi_1_/_2 = 60, (\phi & \psi) =\pm 40'};
% 此时h会返回6个独立的bar对象,每个对应一个柱子
h = bar(CoverageArea,'stacked');
ylabel('Coverage area (m²)');
% 直接复用BarNames作为x轴标签,避免重复代码
xticklabels(BarNames)
colors = get(gca(), 'ColorOrder'); 
set(h, 'FaceColor', 'flat', 'CData', colors(1:6,:))
% 每个BarNames条目对应一个柱子的图例
hLg = legend(BarNames,'Location','best');
grid on;

关键改动说明

  • 将CoverageArea转为列向量:这是核心,让bar函数把每个数值当作单独的柱子,而非同一组的堆叠部分,这样h会包含6个bar对象,每个对应一个柱子。
  • 简化xticklabels:直接使用已定义的BarNames,避免重复编写相同内容。

这样修改后,每个柱子都会对应自己的图例条目,解决你遇到的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:05:23