R语言barplot:消除外侧条形与绘图区域的间距问题
解决barplot条形与绘图框左右间距的问题
我太懂这种调了半天边距却没效果的挫败感了!你遇到的问题根本不是边距(mar)的锅——par(mar...)控制的是绘图区域和整个设备边界的距离,而你看到的条形和box()之间的空白,是barplot()默认在x轴两端预留的额外空间,和边距完全无关。
核心原因
barplot()在生成条形时,会自动给x轴的左右两端加上一点“缓冲空间”,哪怕你设置了space=0也没用——这个参数只控制条形之间的间距,不控制条形和绘图框的边界间距。
解决方案:手动锁定x轴范围
要彻底消除这个间距,我们需要先获取条形的位置,然后计算出刚好贴合条形左右边缘的x轴范围,再传给barplot()的xlim参数。具体步骤如下:
- 先运行一次
barplot()获取条形的中点位置(这个返回值非常关键!) - 根据条形宽度计算出左右边缘的坐标
- 重新绘图时指定
xlim为这个边缘坐标范围
代码示例:
# 先获取条形的中点位置 bar_positions <- barplot(dat[[1]][, 2], beside=TRUE, axes=FALSE, ylim=ylim.axis_left, space=0, col="#808080") # 计算条形宽度:当space=0且beside=TRUE时,每个条形的默认宽度是1 bar_width <- 1 # 计算刚好贴合的x轴范围:左边缘=第一个条形中点 - 宽度/2;右边缘=最后一个条形中点 + 宽度/2 custom_xlim <- c(bar_positions[1] - bar_width/2, bar_positions[length(bar_positions)] + bar_width/2) # 重新设置绘图参数并绘图 par(mar=c(0.1, 15, 0.5, 15)) barplot(dat[[1]][, 2], beside=TRUE, axes=FALSE, ylim=ylim.axis_left, space=0, col="#808080", xlim=custom_xlim) box()
这样绘图后,条形的左右边缘就会完全贴合box()的边界,再也没有讨厌的空白了!
如果你的数据是多组条形(beside=TRUE下有多个组),这个方法同样适用——bar_positions会返回每个组中条形的中点,计算逻辑完全一致。
内容的提问来源于stack exchange,提问作者maciek
相关产品推荐
相关产品推荐

