Matlab中bar(1:30)绘图横轴多余空白问题求助
解决Matlab bar图横轴多余空白的问题
这个问题我之前也碰到过,Matlab的bar图默认会在横轴两端留一点空白,目的是让图表看起来更舒展,但确实有时候我们需要把范围严格限制在数据对应的1到30区间内,同时保证所有条形都完整显示。这里有几种可行的解决办法:
方法1:手动设置横轴范围
直接用xlim函数指定横轴的起止范围,考虑到bar图默认的条形宽度(0.8),我们可以把范围设为从0.6到30.4,这样刚好能完整显示所有条形,且没有多余空白:
bar(1:30); xlim([0.6 30.4]);
如果后续调整了条形宽度(比如通过bar(1:30, 'BarWidth', 0.9)),只需要对应调整xlim的数值即可。
方法2:自动适配条形宽度(更通用)
如果不想手动计算范围,可以通过获取bar对象的属性来自动设置,这种方法不管条形宽度怎么变都能适配:
h = bar(1:30); % 获取条形宽度和数据的最小、最大值 bar_width = h.BarWidth; min_x = min(h.XData); max_x = max(h.XData); % 设置横轴范围,刚好包含所有条形 xlim([min_x - bar_width/2, max_x + bar_width/2]);
方法3:快速收紧坐标轴(注意条形裁剪问题)
如果你不介意条形的边缘稍微被裁剪一点,可以直接用axis tight命令,它会把坐标轴范围严格设置为数据的范围:
bar(1:30); axis tight;
不过这种方式下,第一个条形的左半部分和最后一个条形的右半部分会被坐标轴截断,所以更适合对条形完整性要求不高的场景。
内容的提问来源于stack exchange,提问作者MahD
相关产品推荐
相关产品推荐

