You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 10:43:15