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

Matlab bar函数:如何减小分组柱状图的组间间距?

解决Matlab 2015b中成对柱状图组间间距过大的问题

在Matlab 2015b版本中,bar函数确实没有直接提供调整组间间距的属性(BarWidth仅控制组内柱子的紧凑程度),调大width参数虽然能缩小组间间距,但会导致组内柱子重叠。不过我们可以通过手动修改柱子的X轴位置来实现需求,具体步骤如下:

实现代码

% 生成示例数据并创建成对柱状图
x = rand(10,2); 
hBar = bar(x);

% 设置目标组间间距(默认组间间距为1,数值越小间距越紧凑)
group_gap = 0.6;
num_groups = size(x,1);          % 组数
num_bars_per_group = size(x,2); % 每组柱子数量

% 计算新的组中心位置,缩小组与组之间的间隔
new_group_centers = linspace(1, group_gap*(num_groups-1)+1, num_groups);

% 获取当前的组内柱子宽度参数
bar_width = hBar(1).BarWidth;

% 逐个调整每个系列柱子的X轴位置
for j = 1:num_bars_per_group
    % 计算每个柱子相对于组中心的偏移量,保证组内布局不变
    offset = (j - (num_bars_per_group+1)/2) * bar_width / num_bars_per_group;
    hBar(j).XData = new_group_centers + offset;
end

% 调整X轴刻度,使其对齐新的组中心位置
set(gca, 'XTick', new_group_centers);
% 如果需要自定义刻度标签,取消下面一行注释
% set(gca, 'XTickLabels', 1:num_groups);

原理说明

  1. 首先我们重新计算了每组柱子的中心位置,通过linspace生成更紧凑的组中心坐标,替代默认的1,2,...,n等距分布;
  2. 然后保持组内每个柱子的相对偏移量不变,只修改它们的基准中心位置,这样既缩小组了组间间距,又不会破坏组内柱子的布局(避免重叠);
  3. 最后调整X轴刻度,让刻度线与新的组中心对齐,保证图表的可读性。

你可以根据需求调整group_gap的数值:数值越接近0,组间间距越小;数值接近1时,就和默认布局一致了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:36:55