ggplot2如何在分组百分比堆叠直方图下方添加总频次直方图
实现方案
你可以借助patchwork包拼接两张ggplot2图形,代码简单易维护,同时可以保证两张图的x轴对齐,符合你的需求。
完整可运行代码
# 未安装依赖包先运行:install.packages(c("ggplot2", "patchwork")) library(ggplot2) library(patchwork) # 1. 绘制上方的分组占比直方图 p1 <- ggplot(iris, aes(x = Sepal.Length, group = factor(Species), fill = factor(Species))) + geom_histogram(position = "fill", bins = 30) + # bins可按需调整区间数量 labs(y = "组内占比", fill = "物种") + theme_bw() + # 可选择去掉上方图的x轴刻度和标题,和下方图共用更整洁 theme(axis.title.x = element_blank(), axis.text.x = element_blank(), axis.ticks.x = element_blank()) # 2. 绘制下方的总频次直方图 p2 <- ggplot(iris,aes(x = Sepal.Length)) + geom_histogram(fill = "gray50", bins = 30) + # 保持bins和上图一致,区间对应更准确 labs(y = "总频次", x = "Sepal.Length") + theme_bw() # 3. 上下拼接两张图,设置高度比例 p1 / p2 + plot_layout(heights = c(3, 1))
说明
- 两个图的
bins参数建议保持一致,保证x轴的区间划分完全对应,查看分布关联性更准确 plot_layout里的heights参数可以按需调整上下图的高度比例,比如改成c(2,1)可以让下方的图更大- 如果不需要共用x轴标题,删掉p1的theme里的三行设置即可保留上方图的x轴信息
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

