如何用ggplot制作非分面的垂直多直方图?
解决方案
你可以使用ggridges包的geom_histogram_ridges()函数来实现这种合并式的直方图展示,既不需要分面,也不会产生小提琴图的概率密度效果,同时能适配不同样本量的分组。
步骤1:安装并加载所需包
install.packages("ggridges") # 首次使用需安装 library(ggplot2) library(ggridges)
步骤2:绘图代码
ggplot(data = data, aes(x = x, y = Factor)) + geom_histogram_ridges( scale = 0.9, # 控制各组直方图的高度比例,避免重叠 rel_min_height = 0.01, # 过滤掉极小的直方图尾巴 fill = "lightblue", # 可自定义填充色 color = "black" # 自定义边框色 ) + theme_ridges() # 使用ggridges配套主题,优化视觉效果
代码说明
- 将
Factor映射到y轴,每个因子对应一个水平方向的直方图,实现类似分面但合并为单图的效果 scale参数调整各组直方图的垂直间距,避免互相遮挡rel_min_height可以去掉样本量小的组中几乎看不见的频数尾巴,让图形更整洁- 如果需要保留原始直方图的频数刻度,可以添加
scale_y_discrete(expand = c(0.05, 0))来调整y轴间距
另外,如果你不想额外安装包,也可以通过手动调整数据的位置来实现,但步骤繁琐且效果不如ggridges简洁。
内容的提问来源于stack exchange,提问作者Sergio Rojas-Diaz
相关产品推荐
相关产品推荐

