如何为分组条形图指定单个条形添加图案并设置黑色边框
解决分组条形图图案与边框设置问题
要实现仅中间白色条形(对应stress条件)添加条纹图案,同时所有条形带黑色边框,你需要对代码做以下关键调整:
- 按条件映射图案:在
geom_col_pattern的aes中绑定pattern = condition,通过scale_pattern_manual指定仅stress条件使用stripe图案,其余条件设为none。 - 统一添加黑色边框:给
geom_col_pattern加上color = "black"参数,直接为所有条形设置黑色边框,无需保留冗余的geom_bar图层。 - 修正标签与图例:调整
labs中的文字使其匹配数据集,并通过guides确保图例样式与实际图形一致。
修改后的完整代码
library(ggplot2) library(ggpattern) # 创建数据集(设置随机种子保证结果可复现) set.seed(123) specie <- c(rep("sorgho" , 3) , rep("poacee" , 3) , rep("banana" , 3) , rep("triticum" , 3) ) condition <- rep(c("normal" , "stress" , "Nitrogen") , 4) value <- abs(rnorm(12 , 0 , 15)) data <- data.frame(specie,condition,value) # 绘制图形 ggplot(data, aes(fill=condition, y=value, x=specie, pattern = condition)) + geom_col_pattern(position = "dodge", color = "black", # 所有条形添加黑色边框 pattern_angle = 45, pattern_density = .1, pattern_spacing = .04, pattern_fill = 'black') + theme_classic() + theme(text=element_text(size=16, family="Sans"), plot.title = element_text(hjust=0.5, size=20, face='bold')) + scale_fill_manual('Condition', values=c('black', 'white', 'lightgrey')) + scale_pattern_manual('Condition', values=c("none", "stripe", "none")) + # 仅stress条件显示图案 labs(x='物种', y='数值', title='不同物种在不同条件下的数值') + guides(fill = guide_legend(override.aes = list( pattern = c("none", "stripe", "none"), pattern_spacing = .01, pattern_angle = c(0, 45, 0) ) ))
效果说明
运行代码后,只有对应stress条件的白色条形会显示黑色条纹图案,所有条形均带有黑色边框,图例也将正确展示各条件的样式。
内容的提问来源于stack exchange,提问作者confusedindividual
相关产品推荐
相关产品推荐

