如何在ggplot中强制条形图的y轴截距从0开始
问题原因
- 你尝试的
scale_y_discrete()仅适用于Y轴为分类变量的场景,你的Y轴Total是连续数值变量,调用该函数无法生效,反而会打乱数值映射。 expand_limits(y=0)只能保证0被纳入Y轴取值范围,但无法关闭ggplot默认给连续轴添加的负向扩展边距,因此Y轴仍会显示负值区间。- 你将自定义
theme设置放在theme_bw()之前,theme_bw()作为完整主题会重置所有主题参数,你设置的字号、字体会被覆盖失效。
解决方案
调整连续Y轴的limits和expand参数,同时调整图层顺序即可,修改后的完整代码如下:
plot <- ggplot(df, aes(x = Age.Group, y = Total, fill = factor(Sex))) + geom_bar(stat = "identity", position = "dodge") + scale_fill_grey(name = "Gender", breaks = c(1,2), labels = c("Male", "Female")) + # 配置连续Y轴:下限固定为0,上限自动适配数据最大值,取消默认扩展边距 scale_y_continuous(limits = c(0, NA), expand = c(0, 0)) + xlab("Age Group") + ylab("Number of Respondents") + # 先调用基础主题,再写自定义主题参数 theme_bw() + theme(text = element_text(size = 12, family = "TT Times New Roman"))
如果需要给Y轴顶部留一点空白避免条形顶到绘图区上边界,可以把expand的第二个参数改成合适的数值,比如expand = c(0, 1),就是在Y轴顶部加1单位的留白。
内容的提问来源于stack exchange,提问作者Sahana
相关产品推荐
相关产品推荐

