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

