2015-03-25 12 views
17

Qualche tempo fa ho fatto una domanda sul disegno di boxplot Link1.Come disegnare il boxplot con un livello significativo?

Ho alcuni dati con 3 diversi gruppi (o etichette) Please down load here. Posso usare i seguenti codici R per ottenere il grafico a scatole

library(reshape2) 
library(ggplot2) 

morphData <- read.table(".\\TestData3.csv", sep=",", header=TRUE); 
morphData.reshaped <- melt(morphData, id.var = "Label") 

ggplot(data = morphData.reshaped, aes(x=variable, y=value)) + 
    + geom_boxplot(aes(fill=Label)) 

Qui ho solo chiedendo come mettere il livello significativo al di sopra del grafico a scatole. Per farmi capire metto un taglio screenshot da un documento qui:

Boxplot

+0

L'annotazione è il "significato" che si desidera che i codici di significatività vengano visualizzati a fianco dei valori di p, come in 'summary.lm'? E dato il contesto, l'ipotesi nulla è uguale per ogni coppia? Ggplot è un requisito per te? – vpipkt

risposta

17

io non capisco cosa si intende per grafico a scatole con notevole livello ma ecco un suggerimento come è possibile generare quei bar: Vorrei risolvere questo costruendo piccoli dataframes con le coordinate delle barre. Ecco un esempio:

pp <- ggplot(mtcars, aes(factor(cyl), mpg)) + geom_boxplot() 
df1 <- data.frame(a = c(1, 1:3,3), b = c(39, 40, 40, 40, 39)) 
df2 <- data.frame(a = c(1, 1,2, 2), b = c(35, 36, 36, 35)) 
df3 <- data.frame(a = c(2, 2, 3, 3), b = c(24, 25, 25, 24)) 

pp + geom_line(data = df1, aes(x = a, y = b)) + annotate("text", x = 2, y = 42, label = "*", size = 8) + 
    geom_line(data = df2, aes(x = a, y = b)) + annotate("text", x = 1.5, y = 38, label = "**", size = 8) + 
    geom_line(data = df3, aes(x = a, y = b)) + annotate("text", x = 2.5, y = 27, label = "n.s.", size = 8) 

enter image description here

+0

Grazie per la tua risposta! Tuttavia questo non funziona se il tuo ggplot ha fill = factor (cyl) per esempio, hai qualche idea del perché questo sarebbe il caso? – par

+0

@par Dove l'hai messo? Se lo inserisci all'interno di 'geom_boxplot (aes (fill = factor (cyl)))' funziona ... – DatamineR

15

So che questa è una vecchia domanda e la risposta da DataMiner fornisce già una soluzione per il problema. Ma di recente ho creato un ggplot-estensione che semplifica l'intero processo di aggiunta di barre di significato: ggsignif

Invece di aggiungere noiosamente la geom_line e annotate al vostro diagramma si aggiunge solo un singolo strato geom_signif:

library(ggplot2) 
library(ggsignif) 

ggplot(iris, aes(x=Species, y=Sepal.Length)) + 
    geom_boxplot() + 
    geom_signif(comparisons = list(c("versicolor", "virginica")), 
       map_signif_level=TRUE) 

Boxplot with significance bar

La documentazione completa del pacchetto è disponibile allo CRAN.

Problemi correlati