r - 将多个文本标签添加到单个 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
)
解决方案
对于分面注释,您需要为 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)
)
推荐阅读
- sql - 存储过程正在编译,但值没有得到更新或插入
- oracle - OBIEE 12c。数据透视表的颜色设置
- javascript - 在 Puppeteer 中返回带有 CSS 查询的数组
- autofac - masstransit - 消费者没有注册和激活
- python - Python 字典 .get 方法的默认值为 *args
- javascript - JavaScript 解析嵌套的 JSON 数据
- rest - 通过 REST 将内容上传到 Confluence 的格式是什么?
- javascript - 如果语言不是英语,如何使用 jQuery 对齐文本?
- python - Python 无法导入 SharePlum,即使它已正确安装
- google-sheets - 如何在谷歌表中的数组中找到特定时期的移动平均线/最大值/最小值