如何绘制两组柱形互不遮挡的重叠直方图(附示例数据)
R语言绘制无遮挡分组重叠直方图方案
待使用的分组统计数据
| 分组 | y0 | y1 |
|---|---|---|
| M | 100 | 200 |
| F | 50 | 250 |
常规双直方图同绘方法会出现两类柱形叠压遮挡的问题,要实现柱形互不遮挡的效果,核心是让同区间下的两个分组柱形错位排布,不需要调整透明度,基于ggplot2的实现代码如下:
- 加载依赖、转换数据格式
library(ggplot2) library(tidyr) # 录入统计数据 raw_df <- data.frame( group = c("M", "F"), y0 = c(100, 50), y1 = c(200, 250) ) # 转换为绘图适配的长格式 plot_df <- pivot_longer(raw_df, c(y0, y1), names_to = "y_cat", values_to = "cnt")
- 绘图,通过位置偏移参数实现柱形错位
bar_width <- 0.35 ggplot(plot_df, aes(x = y_cat, y = cnt, fill = group)) + geom_col(width = bar_width, position = position_dodge(width = bar_width)) + # 以下样式可根据需求自行修改 scale_fill_brewer(palette = "Set2") + labs(x = "Y类别", y = "计数", fill = "分组") + theme_minimal()
如果是基于原始未聚合的个体数据绘制直方图,仅需将
geom_col替换为geom_histogram,保持position_dodge()的位置参数设置即可,同一统计区间内的M、F两组柱形会自动左右错开,完全不会出现遮挡问题。
内容的提问来源于stack exchange,提问作者Patrick Star
相关产品推荐
相关产品推荐

