ggplot2在箱线图上方添加文本

9

我有一组数据,我正在使用ggplot2绘制箱线图,看起来像这样:

> head(varf)
             sID variable       value
1 SP_SA036,SA040   CM0001 0.492537313
2 SP_SA036,SA040   CM0001 0.479564033
3 SP_SA036,SA040   CM0001 0.559139785
4 SP_SA036,SA040   CM0001 0.526806527
5 SP_SA036,SA040   CM0001 0.009049774
6 SP_SA036,SA040   CM0001 0.451612903

变量“column”包含16个不同的ID(从CM0001到CM0016)。
我有一个带注释的数据框。
category   annotation
CM001      HG4450
CM002      HG3288
..
CM016      MM8998

我希望在我的箱线图上添加这些注释,但是找不到合适的方法,请问使用geom_text和boxplot的正确语法是什么?

谢谢。

2个回答

9

有很多方法可以解决这个问题,例如 这里这里。可能最简单的方法是

meds <- c(by(mtcars$mpg, mtcars$cyl, median))
ggplot(mtcars, aes(factor(cyl), mpg)) +
    geom_boxplot() + 
    geom_text(data=data.frame(), aes(x=names(meds), y=meds, label=1:3), col='red', size=10)

enter image description here


2
唯一的问题是,使用geom_text()时,由于我有一个非常大的数据框而不仅仅是3个标签,我们最终会一遍又一遍地覆盖相同的值。 - Rad
你确定吗?我这里没有看到任何覆盖:length(meds) 正好是您的类别数量,因此每个标签只会被绘制一次。 - tonytonov

4
varf <- read.table(text = "sID variable       value
SP_SA036,SA040   CM0001 0.492537313
SP_SA036,SA040   CM0001 0.479564033
SP_SA036,SA040   CM0001 0.559139785
SP_SA036,SA040   CM0002 0.526806527
SP_SA036,SA040   CM0002 0.009049774
SP_SA036,SA040   CM0002 0.451612903", header = T)

anot <- read.table(text = "category   annotation
CM0001      HG4450
CM0002      HG3288", header = T)

varf <- merge(varf, anot, by.x = "variable", by.y = "category", all.x = T)

library(data.table)
quants <- data.table(varf)[, list(quant = as.numeric(quantile(value)[3])), by = variable]
ggplot(varf, aes(x = variable, y = value, fill = variable)) + 
  geom_boxplot() +
  geom_text(data = quants, aes(x = variable, y = quant, label = variable), size = 10)

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接