2014-04-15 150 views
3

我有我繪製上ggplot2爲箱線圖看起來像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 

變量列包含16點不同的ID(從CM0001到CM0016)

數據上添加文字我有註釋的數據幀

category annotation 
CM001  HG4450 
CM002  HG3288 
.. 
CM016  MM8998 

我想這些註釋上我的盒形圖的頂部映射,但無法找到一個方法來做到這一點,什麼是正確的語法使用geom_text boxplot?

謝謝

回答

4

有很多方法可以解決這個問題, herehere。也許最簡單的方法是

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

+0

唯一的問題是,隨着geom_text(),我們最終會一遍又一遍的覆蓋相同的值,因爲我有一個非常大的數據框不僅有3個標籤 – Rad

+0

您確定嗎?我在這裏沒有看到任何重寫:'length(meds)'就是您的類別數量,因此每個標籤只會繪製一次。 – tonytonov

3
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