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

如何通过scale_pattern_manual为ggplot堆叠条形图设置不同图案角度

解决堆叠条形图按组设置图案角度的问题

要实现三个堆叠层分别显示45度斜线、交叉线、180度竖直线,核心是把pattern_angle和stack变量做美学映射,再用scale_pattern_angle_manual指定每个分组的角度值——不能直接在geom_col_pattern里传向量,这就是你之前报错的原因。另外你原代码里同时用了geom_bar和geom_col_pattern会导致图层重叠,得删掉geom_bar。

修改后的完整代码如下:

set.seed(687532)                     # 创建示例数据框
data <- data.frame(facet = rep(LETTERS[1:5], each = 6),
                   group = c("x", "y"),
                   stack = letters[1:3],
                   value = round(abs(rnorm(30)), 2))

ggplot(data,                         # 绘制带分组和堆叠的条形图
       aes(x = group,
           y = value,
           fill = stack,
           pattern = stack,
           pattern_angle = stack)) +  # 新增pattern_angle的美学映射
  geom_col_pattern(
    position = "stack", width = 0.6,
    pattern_size = .05,
    pattern_density = .1,
    pattern_spacing = .02,
    pattern_fill = "black",
    color = "black",
  ) + 
  theme_classic() + 
  theme(panel.border = element_rect(colour = NA, fill=NA, size=0),
        text = element_text(size = 8, family = "sans"),
        panel.background = element_blank(),
        panel.spacing = unit(0, "line"), 
        strip.background = element_blank(),
        strip.placement = "outside",
        plot.title.position = 'plot', 
        plot.title = element_text(hjust = 0.5),
        axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1)) + 
  scale_y_continuous(expand = c(0,0)) +  
  labs(x = "", y = expression(paste("Relative Abundance(%)"))) + 
  facet_wrap(~facet, strip.position = "bottom", scales = "free_x") +
  scale_x_discrete(NULL, expand = c(0.3, 0.3)) + 
  scale_fill_manual(values = c('black', 'lightgrey', 'darkgrey')) +
  scale_pattern_manual(
    values = c('stripe', 'crosshatch', 'stripe')  # 指定每个stack的图案类型
  ) +
  scale_pattern_angle_manual(
    values = c(45, 45, 180)  # 对应每个stack的图案角度:a=45度,b=45度(交叉线角度不影响效果),c=180度
  )

关键修改说明:

  • 在ggplot的全局aes里添加pattern_angle = stack,把角度和堆叠组绑定
  • 新增scale_pattern_angle_manual,给stack的三个类别分别设置对应角度
  • 删除了重复的geom_bar,避免图层重叠,只用geom_col_pattern实现堆叠条形图

内容的提问来源于stack exchange,提问作者confusedindividual

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 05:45:16