如何在ggplot分组堆叠条形图中修改颜色与填充图案
解决ggplot分组堆叠条形图同时设置颜色与填充图案的问题
要在分组堆叠条形图中同时实现自定义颜色和填充图案,核心是正确使用ggpattern包的geom_col_pattern,并同时映射fill和pattern到堆叠变量,以下是具体解决方法:
步骤1:安装并加载依赖包
首先确保安装ggpattern包(用于实现图案填充):
install.packages("ggpattern") library(ggpattern) library(ggplot2)
步骤2:修改绘图代码
对原代码进行调整,重点是在aes中添加pattern映射,用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)) + # 堆叠部分的图案映射 geom_col_pattern( position = "stack", # 保持堆叠设置,避免变回单组 width = 0.6, pattern_fill = "black", # 图案线条颜色 pattern_density = 0.1, # 图案密度 pattern_spacing = 0.02 # 图案间距 ) + theme_classic() + theme(panel.border = element_rect(colour = NA, fill=NA, size=0), text = element_text(size = 8, family = "sans")) + scale_y_continuous(expand = c(0,0)) + labs(x = "", y = expression(paste("Relative Abundance(%)"))) + facet_wrap(~facet, strip.position = "bottom", scales = "free_x") + theme(panel.background = element_blank(), panel.spacing = unit(0, "line"), strip.background = element_blank(), strip.placement = "outside") + theme(plot.title.position = 'plot', plot.title = element_text(hjust = 0.5)) + theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1)) + # 自定义堆叠部分的颜色 scale_fill_manual(values = c("a" = "#FF9999", "b" = "#99CCFF", "c" = "#99FF99")) + # 自定义堆叠部分的图案 scale_pattern_manual(values = c("a" = "stripe", "b" = "circle", "c" = "crosshatch"))
关键说明
- 之前出现“变回单组”的问题,大概率是未在
aes中同时映射fill和pattern到堆叠变量stack,或者position参数未设置为"stack"。 geom_col_pattern的pattern_density、pattern_spacing等参数可根据需求调整,优化图案显示效果。scale_pattern_manual支持的图案类型包括stripe、circle、crosshatch、wave等,可自由搭配。
内容的提问来源于stack exchange,提问作者confusedindividual
相关产品推荐
相关产品推荐

