ggplot2 aggiungere un testo su boxplot

Ho una serie di dati che sto tramando su ggplot2 come boxplot che sembrano

> 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

La variabile di colonna contiene 16 Id diversi (da CM0001 per CM0016)

Ho un dataframe con annotazione

category   annotation
CM001      HG4450
CM002      HG3288
..
CM016      MM8998

Vorrei una mappa di queste annotazioni sulla parte superiore del mio boxplot ma non riusciva a trovare un modo per farlo, qual è la corretta sintassi di utilizzo geom_text con boxplot ?

Grazie

OriginaleL’autore Rad | 2014-04-15

2 Replies
  1. 5

    Ci sono molti modi per affrontare questo problema, ad esempio qui e qui. Probabilmente il modo più semplice è

    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)

    ggplot2 aggiungere un testo su boxplot

    Unico problema è che con geom_text() finiremo per sovrascrivere il valore stesso più e più volte, perché ho un grande dataframe non solo 3 etichette
    Sono sicuro? Non vedo nessuna sovrascrittura qui: length(meds) è esattamente il numero di categorie, in modo che ogni etichetta deve essere utilizzata solo una volta.

    OriginaleL’autore tonytonov

  2. 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)

    ggplot2 aggiungere un testo su boxplot

    OriginaleL’autore David Arenburg

Lascia un commento