2012-07-05 57 views
7

Me gustaría trazar un diagrama de caja INDIVIDUAL para cada columna no relacionada en un marco de datos. Pensé que estaba en el camino correcto con boxplot.matrix del paquete sfsmsic, pero parece hacer lo mismo que boxplot(as.matrix(plotdata) que es trazar todo en un diagrama de caja compartido con una escala compartida en el eje. Quiero (digamos) 5 tramas individuales.R: Trazar gráficos de cajas múltiples usando columnas del marco de datos

que podía hacer esto a mano como:

par(mfrow=c(2,2)) 
boxplot(data$var1 
boxplot(data$var2) 
boxplot(data$var3) 
boxplot(data$var4) 

Pero tiene que haber una manera de utilizar las columnas del marco de datos?

EDIT: utilicé iteraciones, ver mi respuesta.

Respuesta

2

Solía ​​iteración para hacer esto. Creo que quizás no estaba claro en la pregunta original. Gracias por las respuestas, no obstante.

par(mfrow=c(2,5)) 
for (i in 1:length(plotdata)) { 
     boxplot(plotdata[,i], main=names(plotdata[i]), type="l") 

} 
7

De ?boxplot vemos que tenemos la opción de pasar múltiples vectores de datos como elementos de una lista, y obtendremos múltiples diagramas de caja, uno para cada vector en nuestra lista.

Así que todo lo que necesitamos hacer es convertir las columnas de nuestra matriz a una lista:

m <- matrix(1:25,5,5) 
boxplot(x = as.list(as.data.frame(m))) 

Si realmente quieres paneles separados, cada uno con un único diagrama de caja (aunque, francamente, no veo por qué que se quiere hacer eso), yo en cambio, elijo ggplot y facetas:

m1 <- melt(as.data.frame(m)) 
library(ggplot2) 
ggplot(m1,aes(x = variable,y = value)) + facet_wrap(~variable) + geom_boxplot() 
+2

-1 para hacer trampas mediante la lectura de la documentación. ;-) –

+0

Al usar esto, se devuelve una sola gráfica con múltiples categorías x. Estoy tratando de hacer gráficas separadas para cada x categoría que se encuentra en una matriz. 'par (mfrow = c (2,5)) boxplot (x = as.list (as.data.frame (plotdata)))' es el código que utilicé, donde plotdata es una ... doble matriz x9 . – gisol

+0

@gisol Ver mi edición. – joran

10

podría utilizar el paquete de reshape para simplificar las cosas

data <- data.frame(v1=rnorm(100),v2=rnorm(100),v3=rnorm(100), v4=rnorm(100)) 
library(reshape) 
meltData <- melt(data) 
boxplot(data=meltData, value~variable) 

o incluso a continuación, utilizar ggplot2 paquete para hacer las cosas más agradable

library(ggplot2) 
p <- ggplot(meltData, aes(factor(variable), value)) 
p + geom_boxplot() + facet_wrap(~variable, scale="free") 
+0

¿cuál es la diferencia entre 'derretimiento' y' pila'? –

Cuestiones relacionadas