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

MATLAB柱状图低值条形被遮挡如何解决?求短条形前置方法

解决MATLAB柱状图短条形被遮挡的问题

嘿,这个问题我之前做实验可视化时也碰到过!你猜的没错——同一位置的两个条形是按你绘制的顺序叠放的,后画的会盖在先画的上面。要让短条形始终露在外面,关键就是动态调整每个分组里两个条形的绘制顺序,让数值小的那个最后画(也就是放在最上层)。

下面是修改后的完整代码,直接就能用你的示例数据测试:

% 你的示例数据
Arrival_rate = [30, 60, 80, 100];
per_A = [46.361, 30.585, 20.674, 16.209];
per_B = [44.892, 25.602, 23.352, 18.597];

bar_width = 0.35; % 设置条形宽度,避免两个条形完全重叠
x_pos = 1:length(Arrival_rate); % 每个分组的中心位置

% 创建画布并开启hold模式
fig = figure('DefaultAxesFontSize',12);
hold on;

% 逐组判断并绘制条形,确保短条形在上层
for i = 1:length(x_pos)
    if per_A(i) >= per_B(i)
        % 若per_A更高,先画per_A(下层),再画per_B(上层)
        bar(x_pos(i) - bar_width/2, per_A(i), bar_width, 'FaceColor', '#1f77b4');
        bar(x_pos(i) + bar_width/2, per_B(i), bar_width, 'FaceColor', '#ff7f0e');
    else
        % 若per_B更高,先画per_B(下层),再画per_A(上层)
        bar(x_pos(i) + bar_width/2, per_B(i), bar_width, 'FaceColor', '#ff7f0e');
        bar(x_pos(i) - bar_width/2, per_A(i), bar_width, 'FaceColor', '#1f77b4');
    end
end

% 美化图表细节
xticks(x_pos);
xticklabels(Arrival_rate);
xlabel('Arrival_rate');
ylabel('Percentage');
legend('per_A', 'per_B', 'Location', 'best');
grid on;
hold off;

关键逻辑说明

  • 逐组判断高度:不再一次性绘制所有条形,而是循环处理每个Arrival_rate分组,比较当前组的per_A和per_B数值大小。
  • 控制绘制顺序:把较高的条形先绘制(会处于下层),较矮的后绘制(会处于上层),这样短条形就不会被遮挡了。
  • 位置偏移:通过x_pos(i) ± bar_width/2来控制两个条形的左右位置,保证同一分组的两个条形并排显示,不会完全重叠。

如果你之前用的是bar的多列分组模式(比如bar([per_A', per_B'], bar_width)),这种模式默认按列顺序固定叠放层级,没法动态调整,所以改成逐组单独绘制是最灵活的解决方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:28:22