首页 > 解决方案 > 将多个文本标签添加到单个 facet_grid 面板

问题描述

按照这个示例,我可以向每个分面网格添加一些文本,但是在一个面板上,我需要在每组箱线图上使用 2 个单独的标签,类似于 stat_compare_means 生成的标签的间距。我目前的逻辑每个面板只能容纳一个标签。如何防止它们重叠或为每个标签设置单独的坐标?

  ID<-c('E5b','R6',"S22","E5b","R6","S22","E5b","R6","S22","E5b","R6","S22","E5b","R6","S22","E5b","R6",
      "S22","E5b","R6","S22","E5b","R6","S22","E5b","R6","S22","E5b","R6","S22")
value<-c(1.02048033657553e-05, 7.03779542465882e-07, 3.51889771232941e-07, 5.69459095210849e-06, 5.42341995438904e-07,
         1.08468399087781e-06, 1.15124329576991e-05, 2.34947611381614e-07, 4.69895222763228e-07, 1.02807349661977e-05,
         2.12704861369607e-06, 0, 1.90550741185218e-06, 1.52440592948174e-06, 0, 1.23540828390671e-06, 4.11802761302236e-07,
         0, 5.22781921260155e-06, 1.04556384252031e-06, 0, 1.71521997010029e-06, 0, 2.05826396412034e-06, 4.18012063828162e-06,
         0, 7.60021934233022e-07, 2.93951950197596e-05, 0, 2.31458228502044e-07)
condition<-c("E","E","E","E","E","E","E","E","E","E","R","R","R","R","R","R","R","R","R",
             "R","R","S","S","S","S","S","S","S","S","S")
family<-c("Unassigned","Unassigned","Siphoviridae","Unassigned","Unassigned","Siphoviridae","Unassigned","Unassigned",
          "Siphoviridae","Unassigned","Unassigned","Siphoviridae","Unassigned","Unassigned","Siphoviridae","Unassigned",
          "Unassigned","Siphoviridae","Unassigned","Unassigned","Siphoviridae","Unassigned","Unassigned","Siphoviridae",
          "Unassigned","Unassigned","Siphoviridae","Unassigned","Unassigned","Siphoviridae")
seqlength<-NA
seqlength[1]<-'1941 kb'
seqlength[2]<-'1001 kb' 
seqlength[3]<-'1214 kb'
df <- data.frame(ID,value,condition,family,seqlength)


p <- ggboxplot(df, x = "ID", y = "value",
          color = "condition", 
          palette = "jco",add = "jitter")+
          facet_wrap(~family,scales='free_x')+
          scale_y_continuous(labels = comma)+
          stat_compare_means(aes(group = condition),size=3,label="p.format") #label = "p.signif"

p + geom_text(
  data    = df,
  mapping = aes(x = -Inf, y = -Inf, label = seqlength),
  hjust   = -2,
  vjust   = -40
)
 

在此处输入图像描述

标签: rggplot2geom-text

解决方案


对于分面注释,您需要为 ggplot 提供一个带有分面变量的数据框。但是,如果您将注释附加到数据的每一行,则文本将被过度绘制并且看起来很杂乱无章。一个好的解决方法是准备一个仅包含注释信息的单独表格,因此每个标签只绘制一次:

#p <- ggboxplot(df, ]...

df_labels <- data.frame(
  family = c("Unassigned","Unassigned","Siphoviridae"),
    label = c('1941 kb', '1001 kb', '1214 kb'),
    ID = c('E5b','R6',"S22"),
    y = c(0.000028, 0.000028, 0.000028))
    #hardcoded here but could make dynamic to taste by using max(df$value) etc.


p + geom_text(
  data    = df_labels,
  mapping = aes(x = ID, y = y, 
                label = label)
)

在此处输入图像描述


推荐阅读