ggplot箱图手动分组着色求助:首次代码正常,重复运行异常
解决ggplot箱形图按组配色及代码运行问题
嘿,我来帮你搞定这个问题!首先咱们先解决按组配色的需求,然后再排查之前代码突然失效的可能原因。
一、实现箱形图按组配色(Qilai和Nagigi同色)
要让指定站点用同一种颜色,你需要先给数据框添加一个分组变量,然后在ggplot的美学映射里绑定填充色(或边框色)到这个分组,最后手动指定颜色值:
先给
tissue_A添加分组列
把Qilai和Nagigi归为同一组,Suva单独一组:# 创建分组列 tissue_A$Group <- ifelse(tissue_A$Site %in% c("Qilai", "Nagigi"), "Remote_Sites", "Suva")修改ggplot代码,添加配色逻辑
在aes里加入fill=Group,然后用scale_fill_manual指定你想要的颜色:# 加载必要包(如果没加载的话) library(ggplot2) library(ggsignif) B1 <- ggplot(tissue_A, aes(x=Site, y=d15N.permil, fill=Group)) + geom_boxplot() + # 保留你原来的显著性标记代码 geom_signif(comparisons = list(c("Suva", "Nagigi")), y_position = 14.3, map_signif_level=TRUE) + geom_signif(comparisons=list(c("Suva", "Qilai")), y_position = 13.8, tip_length = 0.03, vjust=0.2, map_signif_level=TRUE) + # 手动指定颜色,可根据需求替换色值 scale_fill_manual(values = c("Remote_Sites" = "#2ca02c", "Suva" = "#ff7f0e"))如果你想修改箱形图的边框颜色而非填充色,把
fill=Group换成color=Group,对应使用scale_color_manual即可。
二、排查原代码突然失效的可能原因
之前运行正常的代码突然出问题,大概率是以下几个原因之一:
- 数据变动:检查
tissue_A的Site列有没有拼写错误(比如Qilai写成了Qilaii、Nagigi大小写变化),或者数据里的站点取值被修改了 - 包版本或加载问题:确认
ggplot2和ggsignif都已正确加载,有时候包更新后函数参数会有细微变化,可以尝试重新加载包:library(ggplot2); library(ggsignif) - y轴范围冲突:
geom_signif指定的y_position(14.3、13.8)可能超出了当前数据的y轴自动范围,导致显著性标记无法显示或报错,可以尝试手动设置y轴范围:+ ylim(c(min(tissue_A$d15N.permil)-1, 15)) - 对象名冲突:检查有没有其他变量也叫
B1,覆盖了原来的绘图对象
内容的提问来源于stack exchange,提问作者Lauren
相关产品推荐
相关产品推荐

