2011-12-08 18 views
5

Sto provando a fare un boxplot di un elenco di valori su ggplot2, ma il problema è che non sa come gestire gli elenchi, cosa dovrei provare?Come passare un elenco a ggplot2?

Esempio:

k <- list(c(1,2,3,4,5),c(1,2,3,4),c(1,3,6,8,14),c(1,3,7,8,10,37)) 
k 
[[1]] 
[1] 1 2 3 4 5 

[[2]] 
[1] 1 2 3 4 

[[3]] 
[1] 1 3 6 8 14 

[[4]] 
[1] 1 3 7 8 10 37 

Se mi passa k come argomento per boxplot() tratterà in modo impeccabile e produrre una bella (anche non così bello ... hehehe) grafico a scatole con la gamma di tutti i valori come l'asse Y e l'indice di lista (ogni elemento) come l'asse X.

Come devo ottenere lo stesso identico effetto con ggplot2? Penso che i dataframes o le matrici non siano un'opzione perché i vettori hanno una lunghezza diversa.

Grazie

risposta

8

La risposta è che non è così. ggplot2 è progettato per funzionare con i frame di dati, in particolare i frame di dati dei moduli lunghi. Ciò significa che avete bisogno dei vostri dati, come quello alto vettore, con un fattore di raggruppamento:

d <- data.frame(x = unlist(k), 
       grp = rep(letters[1:length(k)],times = sapply(k,length))) 
ggplot(d,aes(x = grp, y = x)) + geom_boxplot() 

enter image description here

E come sottolineato nei commenti, melt raggiunge lo stesso risultato di questa revisione manuale ed è molto più semplice. Credo che mi piaccia rendere le cose difficili.

+0

Hahahaha .. grazie, ho pensato a qualcosa del genere ma non sono riuscito a raggiungerlo. In effetti la tua idea mi ha fatto provare se la funzione 'melt' lo farebbe per me, e funzionava come un fascino !! Quindi la soluzione, se stiamo cercando la semplicità, e in effetti lo siamo, usando 'melt'. – Lianzinho

+0

@Lianzinho Hmm ... Mi chiedo chi ha scritto 'melt'? :-) –

+0

@ gsk3 Sì, ho usato 'melt' per fare tutti gli altri grafici ma in qualche modo non ho pensato di usarlo per questo ... – Lianzinho

Problemi correlati