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

如何让ggplot柱状图底部对齐X轴而非悬浮?

解决ggplot柱状图底部悬浮于X轴上方的问题

问题描述

使用ggplot绘制柱状图时,柱状图底部悬浮在X轴上方,希望将Y轴的0刻度与X轴对齐,消除柱子和X轴之间的空隙。

解决方法

核心是移除Y轴在数据范围外的默认扩展空间,让Y轴0刻度与X轴完全贴合,以下是两种常用实现方式:

方式1:通过scale_y_continuous()设置扩展参数

在绘图代码中添加scale_y_continuous(expand = c(0, 0)),直接取消Y轴的默认边距,让Y轴从0开始并紧贴X轴。

修改后的完整代码:

library(ggplot2)

# 生成模拟数据
fake_colony_data <- round(runif(24, 100, 500),0) 
fake_colony_data[13:24] <- round(runif(12, 20, 100),0)
fake_colony_data[c(FALSE, TRUE)] <- fake_colony_data[c(FALSE, TRUE)]*0
transf_data <- data.frame(selection=rep(c('NTC 200', 'ZEO 50'), each=12),
                 biorep=rep(c('1', '1(-ve)', '2', '2(-ve)', '3', '3(-ve)', '4', '4(-ve)', '5', '5(-ve)', '6', '6(-ve)'), times=2),
                 colonies=fake_colony_data)

# 绘制柱状图并调整Y轴
ggplot(data=transf_data, aes(fill=selection, x=biorep, y=colonies)) +
  geom_bar(position = "dodge", stat="identity") + 
  theme_classic() + 
  labs(title="转化实验结果", x="实验分组", y = "菌落数量") + 
  theme(plot.title = element_text(hjust = 0.5)) + 
  scale_fill_manual(values=c("darkblue", "green")) +
  scale_y_continuous(expand = c(0, 0))  # 关键设置:移除Y轴扩展空间

方式2:通过coord_cartesian()锁定Y轴下限

如果需要同时限制Y轴显示范围,可使用coord_cartesian(ylim = c(0, NA)),它会强制Y轴从0开始,且不会过滤数据(仅调整可视化范围):

# 替换上述代码中的scale_y_continuous行,使用此设置
coord_cartesian(ylim = c(0, NA))

效果说明

添加上述任意一种设置后,柱状图底部会完全贴合X轴,Y轴0刻度与X轴对齐,消除原本的悬浮空隙。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 14:50:15