2011-12-08 12 views
5

Estoy tratando de hacer un diagrama de caja de una lista de valores en ggplot2, pero el problema es que no sabe cómo lidiar con las listas, ¿qué debo probar?¿Cómo pasar una lista a ggplot2?

Ej:

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 

Si paso k como argumento para boxplot() que se encargará de forma impecable y producir un bonito (bueno, no tan agradable ... jejeje) diagrama de caja con la gama de todos los valores como el eje Y y el índice de la lista (cada elemento) como el eje X.

¿Cómo debo lograr exactamente el mismo efecto con ggplot2? Creo que los dataframes o matrices no son una opción porque los vectores son de diferente longitud.

Gracias

Respuesta

8

la respuesta es que no lo hace. ggplot2 está diseñado para trabajar con marcos de datos, particularmente marcos de datos de formas largas. Esto significa que necesita los datos como un vector de alto, con un factor de agrupamiento:

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

Y como se ha señalado en los comentarios, melt logra el mismo resultado que esta reconfiguración manual y es mucho más simple. Creo que me gusta complicar las cosas.

+0

Hahahaha ... gracias, he pensado en algo así pero no pude lograrlo. De hecho, su idea me hizo probar si la función 'melt' lo haría por mí, y funcionó como un encanto !! Así que la solución, si estamos buscando la simplicidad, y de hecho lo somos, usando 'derretimiento'. – Lianzinho

+0

@Lianzinho Hmm ... Me pregunto quién escribió 'derretimiento'? :-) –

+0

@ gsk3 Sí, he usado 'melt' para hacer todos los otros gráficos, pero de alguna manera no pensé en usarlo para este ... – Lianzinho

Cuestiones relacionadas