R语言ggplot2 facet_wrap分面柱状图如何增加顶部额外留白
问题解决方案
你不需要使用cowplot包,直接调整scale_y_continuous()的扩展参数即可实现需求,核心问题出在你当前代码里的expand = c(0, 0)设置——这个参数会完全清空y轴范围和数据极值之间的默认边距,导致最高柱形直接贴在绘图区顶部。
修改后的完整代码
wrap_plot <- df %>% ggplot(aes(x=Race, y = Rate, fill = Sex))+ geom_col(position = "dodge")+ labs(x = "Race/Ethnicity", y = "Rate per 100,000 population")+ theme_classic()+ facet_wrap(~Disease, scales = "free")+ # 底部保持0边距(柱形贴x轴),顶部为每个分面预留5%的空白 scale_y_continuous(expand = expansion(mult = c(0, 0.05)))
参数说明
expansion()是ggplot2内置的辅助函数,专门用于设置坐标轴范围的扩展边距,不需要加载任何第三方包。mult = c(0, 0.05)代表乘性扩展规则:第一个值对应y轴底部,扩展倍数为0,和你之前的效果一致,柱形底部完全贴合x轴;第二个值对应y轴顶部,在每个分面自身最高数据值的基础上向上扩展5%的轴范围,刚好在最高柱上方留出不贴边的空白。- 如果觉得留白大小不符合预期,直接调整第二个数值即可:比如想要更宽的留白就改成0.08(8%),想要更窄的留白就改成0.03(3%)。
- 因为你已经开启了
scales = "free",这个扩展设置会自动适配每个分面自己的y轴数值范围,不会出现部分分面留白过多、部分分面仍然贴边的问题。
如果你使用的是较早版本的ggplot2,找不到
expansion()函数,可以直接把scale_y_continuous那行替换为scale_y_continuous(expand = c(0,0,0.05,0)),效果完全一致,四个数值分别对应「底部乘性扩展、底部加性扩展、顶部乘性扩展、顶部加性扩展」。

内容的提问来源于stack exchange,提问作者Heather
相关产品推荐
相关产品推荐

