R 用离散轴注释ggplot(带可复制示例)

R 用离散轴注释ggplot(带可复制示例),r,ggplot2,R,Ggplot2,我正在努力找到一个简单的解决方案来修复我的情节。问题源于x轴的离散性。为了显示统计结果,我想用文本和片段对绘图进行注释 1)我想打印“Baby”和“Queen”之间以及“Queen”和“Worker”之间的p值,但ggplot只允许在每个标签上方进行注释,而不允许在标签之间进行注释 2)类似地,我希望将前两个geom_段分开,但ggplot不允许我将第一个段结束于“Queen”-0.1,将第二个段开始于“Queen”+0.1,因为这是混合因子和数字 完全可复制的示例如下,第12、13和18行有

我正在努力找到一个简单的解决方案来修复我的情节。问题源于x轴的离散性。为了显示统计结果,我想用文本和片段对绘图进行注释

1)我想打印“Baby”和“Queen”之间以及“Queen”和“Worker”之间的p值,但ggplot只允许在每个标签上方进行注释,而不允许在标签之间进行注释

2)类似地,我希望将前两个geom_段分开,但ggplot不允许我将第一个段结束于“Queen”-0.1,将第二个段开始于“Queen”+0.1,因为这是混合因子和数字

完全可复制的示例如下,第12、13和18行有问题:

data <- data.frame(Group.1 = rep(c("A","B"),3),Group.2 = c("Baby","Baby","Worker","Worker","Queen","Queen"),
                       value = c(0.18,0.30,0.09,0.25,-0.26,-0.55))

boxplot_candidates <- ggplot(aes(y=value,x=Group.2,fill=Group.2),data= data) + theme_bw() +
      scale_fill_manual(values=c("lightgreen","darkgreen","goldenrod1"),name="") +
      theme(plot.title = element_text(face="bold", size=18, hjust=0)) +
      labs(x="",y="Transcript expression\n(log2-centered TMM-nornalised TPMs)") +
      theme(plot.title=element_text(size=18, vjust=2),legend.position="", legend.text=element_text(size=14),
            axis.text.x = element_text(size = 14, colour = "black"),
            axis.text.y = element_text(size = 14, colour = "black"),
            axis.title.y=element_text(size = 14, colour = "black",vjust=1),
            axis.title.x=element_text(size = 14, colour = "black")) +
      geom_segment(aes(x="Baby",xend="Queen",y=0.7,yend=0.7)) + ##### MAKE XEND SMALLER
      geom_segment(aes(x="Queen",xend="Worker",y=0.7,yend=0.7)) + ##### MAKE XEND LARGER
      geom_segment(aes(x="Baby",xend="Worker",y=1.2,yend=1.2)) +
      ylim(-1.5,1.5) + stat_boxplot(geom ='errorbar') +
      geom_boxplot(notch=F,outlier.shape=NA) +
      geom_point(size=2,position = position_jitter(width = 0.2)) + stat_summary(fun.y=mean, colour = "white",geom="point", size=4) +
      annotate("text", x = as.factor(unique(data$Group.2)),y=c(0.8,0.8,1.3),
               label = c("p < 0.001","p < 0.001","p = 0.89"),family="",fontface = 3,size=4) ##### PRINT "p < 0.001" BETWEEN LABELS

print(boxplot_candidates)

data分类变量仅放置在位置1、2、3等处。如果您想到达两个分类变量之间的位置,可以使用坐标,如1.2或1.5等

下面是一个可复制的示例,去掉了所有不相关的主题代码:

data <- data.frame(Group.1 = rep(c("A", "B"), 3),
                   Group.2 = c("Baby", "Baby", "Worker", "Worker", "Queen", "Queen"),
                   value = c(0.18, 0.30, 0.09, 0.25, -0.26, -0.55))

ggplot(data, aes(y = value, x = Group.2, fill = Group.2)) +
  stat_boxplot(geom = 'errorbar') +
  geom_boxplot(notch = F, outlier.shape = NA) +
  geom_segment(aes(x=1.1, xend=1.9, y=0.7, yend=0.7)) + 
  geom_segment(aes(x=2.1, xend=2.9, y=0.7, yend=0.7)) + 
  geom_segment(aes(x=1.1, xend=2.9, y=1.2, yend=1.2)) +
  geom_point(size = 2, position = position_jitter(width = 0.2)) + 
  stat_summary(fun.y = mean, colour = "white", geom = "point", size = 4) +
  annotate("text",
           x = c(1.5, 2.5, 2),
           y = c(0.8, 0.8, 1.3),
           label = c("p < 0.001", "p < 0.001", "p = 0.89"),
           family = "", fontface = 3, size=4) + 
  scale_fill_manual(values=c("lightgreen", "darkgreen", "goldenrod1"),
                    guide = "none") +
  ylim(-1.5, 1.5) +
  labs(x="", y="Transcript expression\n(log2-centered TMM-nornalised TPMs)") +
  theme_bw()

在将来的数据中,请将您的代码简化为再现问题所需的最小示例。没有人愿意费力地通过一行行又一行不相关的主题语句来找到真正导致问题的相关行。另外,请根据公认的风格指南对代码进行格式化,例如:正确格式化的代码更容易阅读,也更容易得到答案。好的,请注意,我把多余的代码留在了那里,以防解决方案与之发生冲突,但这是真的,它不相关。谢谢你的建议和答案!