如何调整ggplot中显著性标注线的x轴位置?
问题原因
- 你调用
add_xy_position()计算显著性标注的坐标时,参考的是Material_Concentration列的默认排序(通常为字符串字典序) - 后续仅通过
scale_x_discrete(limits = )修改x轴展示顺序,不会同步更新之前已经计算完成的标注坐标,因此出现标注错位问题。
解决方法
先将分组列设置为你需要的顺序的因子类型,再执行统计检验和标注坐标计算,无需额外通过scale_x_discrete调整顺序即可得到正确的x轴排序和标注位置。
修正后的完整代码如下:
library(tidyverse) library(here) library(readxl) library(ggforce) library(ggplot2) library(ggsignif) library(ggpubr) library(rstatix) data <- read.csv(here("data", "data.csv"), sep = ";") # 新增:先将分组列设置为目标顺序的因子 target_order <- c("250 µg/ml", "100 µg/ml", "50 µg/ml", "25 µg/ml", "%0", "%10") data$Material_Concentration <- factor(data$Material_Concentration, levels = target_order) # 定义两两比较组 my_comparisons <- list( c("%0", "250 µg/ml"), c("%0", "100 µg/ml"), c("%0", "50 µg/ml"), c("%0", "25 µg/ml")) # 统计检验 stat.test <- data %>% t_test(OD ~ Material_Concentration, p.adjust.method = "bonferroni", comparisons = my_comparisons) %>% add_significance("p.adj") stat.test # 此时计算的标注坐标已经对应自定义的因子顺序 stat.test <- stat.test %>% add_xy_position(x = "Material_Concentration") # 绘图 p <- ggplot(data, aes(Material_Concentration, OD, colour = Material_Concentration))+ stat_summary(fun = mean, geom = "col", aes(fill = Material_Concentration), show.legend = FALSE)+ stat_summary(fun.data = mean_se, geom = "errorbar", width = 0.2, show.legend = FALSE)+ xlab("Treatment Concentrations")+ ylab("Average OD")+ theme(panel.background = element_blank(), plot.title = element_text(color="red", size=40, face="bold.italic", hjust = 0.5), axis.text.x = element_text(size = 20, angle = 45, hjust = 1), axis.text.y = element_text(size = 15), axis.title.y = element_text(size = 15), axis.title.x = element_text(size = 15))+ stat_pvalue_manual(stat.test, label = "p.adj.signif") p
内容的提问来源于stack exchange,提问作者Erdem Erikçi
相关产品推荐
相关产品推荐

