使用ggpattern修改颜色遇问题:箱图仅边框上色且出现随机色
解决ggplot2箱图填充色与图案设置问题
问题分析
你的代码存在两个核心问题:
- 用
color=Treatment2映射的是箱图边框颜色,而非内部填充色;叠加的普通geom_boxplot()使用了fill=Groups的默认配色,导致出现随机颜色 - 同时调用
geom_boxplot()和geom_boxplot_pattern()会生成重复图层,干扰最终显示效果
修正方案
调整映射逻辑并精简图层,让fill对应Ethanol分组(控制填充色),pattern对应MIA分组(控制图案):
cort_v %>% ggplot(aes(x=Groups, y=x, fill=Treatment2, pattern=Treatment1)) + # 仅保留geom_boxplot_pattern,移除重复的geom_boxplot geom_boxplot_pattern( position = position_dodge(preserve = "single"), color = "black", # 统一设置箱图边框为黑色 pattern_fill = "black", pattern_angle = 45, pattern_density = 0.1, pattern_spacing = 0.025, pattern_key_scale_factor = 0.6 ) + # 用scale_fill_manual设置Ethanol分组的填充色 scale_fill_manual(values = c("1" = "red", "0" = "white")) + # 保留图案映射的设置 scale_pattern_manual(values = c(1 = "stripe", 0 = "none")) + geom_point() + theme_minimal()
关键改动说明
- 将
aes中的fill从Groups改为Treatment2,让Ethanol的1/0分组直接控制箱图内部填充色 - 删除多余的
geom_boxplot(),避免图层叠加导致的配色混乱 - 用
scale_fill_manual替代scale_color_manual,针对填充色而非边框色设置规则 - 保留
pattern映射和对应的scale_pattern_manual,维持MIA分组的图案区分效果
内容的提问来源于stack exchange,提问作者Hildi Schild
相关产品推荐
相关产品推荐

