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
相关产品推荐
相关产品推荐

