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);
原理说明
- 首先我们重新计算了每组柱子的中心位置,通过
linspace生成更紧凑的组中心坐标,替代默认的1,2,...,n等距分布; - 然后保持组内每个柱子的相对偏移量不变,只修改它们的基准中心位置,这样既缩小组了组间间距,又不会破坏组内柱子的布局(避免重叠);
- 最后调整X轴刻度,让刻度线与新的组中心对齐,保证图表的可读性。
你可以根据需求调整group_gap的数值:数值越接近0,组间间距越小;数值接近1时,就和默认布局一致了。
内容的提问来源于stack exchange,提问作者user36800
相关产品推荐
相关产品推荐

