如何用R的ggplot2绘制重叠区带斜分柱的双组直方图
实现带斜线分割的双组重叠直方图
现有代码通过半透明重叠显示两组直方图,但重叠区域呈现混合色,需求是让重叠柱体用斜线分割,分别保留两组的原始颜色。由于ggplot2原生不支持斜线填充样式,我们可以借助ggpattern包实现该效果:
完整代码
# 先安装并加载所需包 if (!require("ggpattern")) { install.packages("ggpattern") } library(ggplot2) library(ggpattern) set.seed(1) grupo1 <- round(rnorm(100, mean = 20, sd = 2.2)) grupo2 <- round(rnorm(100, mean = 10, sd = 2)) df <- data.frame( valores = c(grupo1, grupo2), grupo = c(rep("grupo1", length(grupo1)), rep("grupo2", length(grupo2))) ) # 创建带斜线分割的直方图 ggplot(df, aes(x = valores, fill = grupo, pattern = grupo)) + geom_histogram_pattern( binwidth = 1, color = "black", position = "identity", pattern_fill = "black", pattern_angle = c(45, -45), # 两组分别用不同方向的斜线 pattern_density = 0.1, pattern_spacing = 0.02, alpha = 1 # 关闭半透明,保留纯色 ) + labs(x = "Valores", y = "Frecuencia", fill = "Grupo", pattern = "Grupo") + scale_fill_manual(values = c("grupo1" = "blue", "grupo2" = "red")) + scale_pattern_manual(values = c("grupo1" = "stripe", "grupo2" = "stripe")) + theme_minimal()
关键说明
- 使用
geom_histogram_pattern替代原生geom_histogram,支持填充样式和斜线图案 - 通过
pattern_angle设置两组不同的斜线方向(45度和-45度),实现重叠区域的分割视觉效果 - 关闭
alpha半透明,让两组颜色保持纯净,斜线作为区分标识 - 用
scale_pattern_manual统一两组的图案类型为条纹,仅通过角度区分
内容的提问来源于stack exchange,提问作者Simon Ulloa Rengifo
相关产品推荐
相关产品推荐

