如何通过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
相关产品推荐
相关产品推荐

